我有两个问题。第一个查询:时钟的原始数据。第二个查询:时钟输出的原始数据。当我将两个查询组合在一起时,我得到了重复的记录。在我的原始支票上只有2条记录,我的时钟输出查询有6条记录。当我将两个查询组合在一起时,我得到了总共12条记录,两边都有很多重复的条目。
首次查询代码:
SELECT USERINFO.Badgenumber, USERINFO.name, DateValue([Time]) AS DateValue, TimeValue([Time]) AS TimeValue, acc_monitor_log.device_name, Dev.ClockINOut
FROM (Dev INNER JOIN acc_monitor_log ON Dev.DeviceName = acc_monitor_log.device_name) INNER JOIN USERINFO ON acc_monitor_log.pin = USERINFO.Badgenumber
WHERE (((USERINFO.name) Is Null Or (USERINFO.name) Like "*" & [Forms]![Query].[NameQ] & "*") AND ((DateValue([Time]))>=[Forms]![Query]![StartDateQ] And (DateValue([Time]))<=[Forms]![Query]![EndDateQ]) AND ((TimeValue([Time]))>=[Forms]![Query]![StartTimeQ] And (TimeValue([Time]))<=[Forms]![Query]![EndTimeQ]) AND ((Dev.ClockINOut)="Clock In"))
ORDER BY USERINFO.name, DateValue([Time]);
第二个查询代码:
SELECT USERINFO.Badgenumber, USERINFO.name, DateValue([Time]) AS DateValue, TimeValue([Time]) AS TimeValue, acc_monitor_log.device_name, Dev.ClockINOut
FROM (Dev INNER JOIN acc_monitor_log ON Dev.DeviceName = acc_monitor_log.device_name) INNER JOIN USERINFO ON acc_monitor_log.pin = USERINFO.Badgenumber
WHERE (((USERINFO.name) Is Null Or (USERINFO.name) Like "*" & Forms!Query.NameQ & "*") And ((DateValue([Time]))>=Forms!Query!StartDateQ And (DateValue([Time]))<=Forms!Query!EndDateQ) And ((TimeValue([Time]))>=Forms!Query!StartTimeQ And (TimeValue([Time]))<=Forms!Query!EndTimeQ) And ((Dev.ClockINOut)="Clock Out"))
ORDER BY USERINFO.name, DateValue([Time]);
上述两个查询的综合查询:
SELECT RQOut.Badgenumber, RQOut.name, RQOut.DateValue, RQOut.TimeValue, RQOut.ClockINOut, RQIn.TimeValue, RQIn.device_name, RQIn.ClockINOut, [RQIn].[TimeValue]-[RQOut].[TimeValue] AS Timess
FROM RQOut INNER JOIN RQIn ON (RQOut.Badgenumber = RQIn.Badgenumber) AND (RQOut.name = RQIn.name) AND (RQOut.DateValue = RQIn.DateValue)
WHERE (((RQOut.name) Is Null Or (RQOut.name) Like "*" & [Forms]![Query].[NameQ] & "*") AND ((RQOut.DateValue)>=[Forms]![Query]![StartDateQ] And (RQOut.DateValue)<=[Forms]![Query]![EndDateQ]) AND ((RQOut.TimeValue)>=[Forms]![Query]![StartTimeQ] And (RQOut.TimeValue)<=[Forms]![Query]![EndTimeQ]))
ORDER BY RQOut.TimeValue, RQIn.TimeValue;
任何人都可以告诉我为什么我会这样做。提前谢谢。
答案 0 :(得分:1)
两个数据集之间的INNER JOIN返回字段匹配的两个数据集中的记录。如果第一个数据集中的一个记录与第二个数据集中的10个记录(例如)匹配,则返回10个记录。
这实际上是内部联接在上一次查询中遵循的过程:它将查看RQin的记录1,然后在RQout中搜索匹配的记录。对于您要求匹配的字段,将返回RQOut中的所有记录,因为您加入的字段与所有记录匹配。然后它对RQIn中的记录2执行相同的操作,并再次与RQOut上的所有记录匹配。这意味着你得到2 x 6 = 12条记录。