本帖最后由 kimi 于 2014-2-20 16:55 编辑
您好,我有一张出差的表 该表存的是id,姓名 该表下面有两张子表 子表1为休息日出差表 存的是主表id,休息日出差开始时间,休息日出差结束时间,休息日出差小时数 。子表2为工作日出差表 存的是主表id,工作日出差开始时间,工作日出差结束时间,工作日出差小时数 .
我现在需要生成一张报表,报表有休息日出差开始时间、休息日出差结束时间、工作日出差开始时间、工作日出差结束时间四个查询条件,录入其中任意查询条件均可查询用户在此时间段内休息日总共出差时长及工作日总共出差时间,我目前语法为下,但是结果不对,结果将表里的记录进行组合了,本来3条数据变成了27条。请问是什么原因!- SELECT TLK_出差申请单.ITEM_姓名,TLK_出差申请子表单_休息.ITEM_小时数 休息日出差时长,TLK_出差申请子表单_工作.ITEM_小时数 工作日出差时长 FROM TLK_出差申请单,TLK_出差申请子表单_休息,TLK_出差申请子表单_工作 WHERE TLK_出差申请单.ID=TLK_出差申请子表单_休息.PARENT and TLK_出差申请单.ID=TLK_出差申请子表单_工作.PARENT and TLK_出差申请单.statelabel!='终止' and ((TLK_出差申请子表单_休息.ITEM_开始时间 >? or ? is null )and (TLK_出差申请子表单_休息.ITEM_开始时间<? or ? is null ))or ((TLK_出差申请子表单_休息.ITEM_结束时间 <? or ? is null )and (TLK_出差申请子表单_休息.ITEM_结束时间>? or ? is null ))and ( (TLK_出差申请子表单_工作.ITEM_开始时间 >? or ? is null) and (TLK_出差申请子表单_工作.ITEM_开始时间<? or ? is null ))or ((TLK_出差申请子表单_工作.ITEM_结束时间 <? or ? is null) and (TLK_出差申请子表单_工作.ITEM_结束时间>? or ? is null))
复制代码 后来改成left join查出来也是组合后的27条数据- SELECT TLK_出差申请单.ITEM_姓名,TLK_出差申请子表单_休息.ITEM_小时数 休息日出差时长,TLK_出差申请子表单_工作.ITEM_小时数 工作日出差时长 FROM TLK_出差申请单 left join TLK_出差申请子表单_休息 on TLK_出差申请单.ID=TLK_出差申请子表单_休息.PARENT and ((TLK_出差申请子表单_休息.ITEM_开始时间 >? or ? is null )and (TLK_出差申请子表单_休息.ITEM_开始时间<? or ? is null ))or ((TLK_出差申请子表单_休息.ITEM_结束时间 <? or ? is null )and (TLK_出差申请子表单_休息.ITEM_结束时间>? or ? is null )) left join TLK_出差申请子表单_工作 on TLK_出差申请单.ID=TLK_出差申请子表单_工作.PARENT and ( (TLK_出差申请子表单_工作.ITEM_开始时间 >? or ? is null) and (TLK_出差申请子表单_工作.ITEM_开始时间<? or ? is null ))or ((TLK_出差申请子表单_工作.ITEM_结束时间 <? or ? is null) and (TLK_出差申请子表单_工作.ITEM_结束时间>? or ? is null)) WHERE TLK_出差申请单.statelabel!='终止'
复制代码 |