求一个sql查询语句的思路,谢谢。(200)

  • 主题发起人 主题发起人 ilook
  • 开始时间 开始时间
I

ilook

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库:access。开发工具:delphi7。里面有四个表:员工信息表(A),员工考核信息表(B),员工培训记录表(C),员工出差信息表(D),其中,A表中的clientid在B、C、D表中都有,一对多的关系。现在想实现这样的查询:[red]查询条件有4个部分组成,分别针对每个表的N个字段[/red],比如A表中,员工所在省份;B表中,考核等级;C表中,培训结论;D表中,出差工作评定级别。现在查询的时候,可能仅为某个表中一个字段条件,也有可能为几个表中的几个字段。如:查员工所在省份为“浙江”,或者查考核等级为“优秀”,或者查培训结论为“优秀”,或者查出差工作评定级别为“合格”,或者是以上其中几个的组合。查询的结果,在dbgrid中,都是显示员工信息表中某几个固定的字段。请问这样的查询要如何实现,或者说思路是什么?因为有可能是在一个表中查询,也有可能是在几个表中同时查,结果返回符合条件的员工信息。写得比较多,不知描述是否清楚。谢谢赐教。
 
把表结构列出来~~
 
1.不知道你的界面是否已经能做到把所有的查询条件都变成输入控件显示在那了2.在不考虑效率的情况下,可以用in,而且你上面都写了 或者,那么用or试试看,例如select * from 员工信息表where (@省份 = '' or 省份 = @省份) and (@等级 = '' or clientid in (select clientid from 考核信息 where 等级 = @等级) )以上的 @是SQL Server中存储过程的变量,你这可以用D7界面上拼SQL的方式实现
 
我用的是access的数据库,不是用sql server。已经把所有的查询条件都变成输入控件显示在那了!
 
自己顶一下。谢谢。
 
你把详细的表结构和控件都列出来,直接帮你写得了如果不行,只有这样帮你弄咯A表中,员工所在省份; edit1,checkbox1(选中checkbox1,增加查询省份条件,条件从edit1读取)B表中,考核等级; edit2,checkbox2(选中checkbox2,增加查询考核等级条件,条件从edit2读取)C表中,培训结论; edit3,checkbox3(选中checkbox3,增加查询培训结论条件,条件从edit3读取)D表中,出差工作评定级别。edit4,checkbox4(选中checkbox4,增加查询出差工作评定级别条件,条件从edit4读取)var vSql,vCondition :string;begin .... vSql:= 'select * from A表,B表,C表,D表 where A.表.clientid=B表.clientid and B.表.clientid=C表.clientid and C表.clientid=D表.clientid '; vCondition := ''; if checkbox1.checked then vCondition := vCondition + ' and A表.省份='+''''+edit1.text+''''; if checkbox2.checked then vCondition := vCondition + ' and B表.考核等级='+''''+edit2.text+''''; if checkbox3.checked then vCondition := vCondition + ' and C表.培训结论='+''''+edit3.text+''''; if checkbox4.checked then vCondition := vCondition + ' and D表.出差工作评定级别='+''''+edit4.text+''''; vSql:= vSql+ vCondition ; with adoquery1 do //假设adoquery1连接成功了 begin adoquery1.close; adoquery1.clear; adoquery1.add(sql); adoquery1.open; end; .....这样基本能看的懂吧end
 
由于表结构和查询查询十分多,倒不方便全部列出,我给出的应该是一个示例,有好的方法的话,完全就可以举一反三了。组合的sql的,一定是 select * from 表0,表1,表2,表3...,表N where ....吗?有没有更加优化一点的办法呢?[red]谢谢[/red]
 
在Access中可以通过查询设计器来设计查询,其他还有inear join /left join /right join
 
组合的sql的,一定是 select * from 表0,表1,表2,表3...,表N where ....吗?不是有没有更加优化一点的办法呢?有我提供的是一种思路难道你自己思考就得不出结果吗?比如第一个写 要查的字段名第二个写 要查的表 第三个写 要查询的条件(第四个写 多表的关联条件)(第五个写 分组的条件)(第六个写 排序的方法)自己进行任意组合不就可以了思路已经说的明白了,散分吧
 
多人接受答案了。
 
后退
顶部