日期:2014-05-16  浏览次数:20977 次

写查询语句把Aceess写崩掉了,大家讨论下
视图dataview

SELECT   测试结果.结果ID,   (select   姓名   from   个人信息   where   个人编号=测试结果.个人编号)   AS   姓名,   测试结果.个人编号   AS   心测号,   (select   出生日期   from   个人信息   where   个人编号=测试结果.个人编号)   AS   出生日期,(select   性别   from   个人信息   where   个人编号=测试结果.个人编号)   AS   性别,   =DateDiff( "m ",(select   出生日期   from   个人信息   where   个人编号=测试结果.个人编号),   测试结果.测查日期)/12   AS   年龄,   (select   婚姻   from   婚姻类型信息   where   婚姻ID=测试结果.婚姻ID)   AS   婚姻,   (select   文化   from   文化类型信息   where   文化ID=测试结果.文化ID)   AS   文化,   (select   职业   from   职业类型信息   where   职业ID=测试结果.职业ID)   AS   职业,   (select   被试来源   from   被试来源类型信息   where   被试来源ID=测试结果.被试来源ID)   AS   被试来源,   (select   主测人姓名   from   主测人信息   where   主测人ID=测试结果.主测人编号)   AS   主测人,   测试结果.测查日期,   测试结果.测查用时   AS   完成时间,   (select   住院号   from   个人信息   where   个人编号=测试结果.个人编号)   AS   病历号,   (select   诊断名   from   诊断类型信息   where   诊断ID=测试结果.诊断ID)   AS   诊断,   测试结果.病区,   测试结果.病程,   (select   病情   from   病情类型信息   where   病情ID=测试结果.病情ID)   AS   病情,   测试结果.量表ID,   (select   量表中文名   from   量表信息   where   量表ID=测试结果.量表ID)   AS   量表中文名,   测试结果.结果
FROM   测试结果;

对视图进行条件查询
select   *   from   DataView   where   量表ID=66   and   性别= '男 '

查询出的结果
出生日期 性别
1979-5-30 女
1979-5-30 女
2007-2-25 女
1981-12-1 女
2007-1-29 女
居然把原数据为男的,全用女显出来

------解决方案--------------------
1、你的查询要优化一下,用N个INNER JOIN即可,你的查询大量用子查询,影响效率;
2、在ACCESS中,如查询过于复杂、IIF用得过多,会出现问题,可拆分为数个查询,再
连接。

------解决方案--------------------
不建议把查询做得这么复杂,一个是效率低,另外就是维护起来比较困难。

建议通过把中间的数据存放到表中,在中间表数据的基础上再做查询。
------解决方案--------------------
属性 最大值
实施关系的个数 每个表为 32 减去表中不包含在关系中的字段或字段组合的索引个数
查询中的表的个数 32
记录集中的字段个数 255
记录集大小 1G 字节
排序限制 255 个字符(一个或一个以上字段)
嵌套查询的层次数 50
查询设计网格一个单元格中的字符个数 1,024
参数查询的参数字符个数 255
WHERE 或 HAVING 子句中 AND 的个数 99
SQL 语句中的字符个数 约为 64,000