我有一个LoggedDischarges表和另一个ActualDischarges表。
我正在尝试生成一个查询,该查询将向我提供ActualDischarges中的所有字段,但不包括已基于AgencyID,Program和ActivityEndDate的LoggedDischarges中的字段
客户可以在多个程序中,并在同一天从多个程序中解除。我需要确保从每个程序中获取LoggedDischarges。
这就是我所拥有但不确定如何添加其他标准。
select * from ActualDischarges
where (agencychildid ) not in
(select agencyid from LoggedDischarges)
谢谢,
Steve Hathaway
答案 0 :(得分:2)
即使您的DBMS支持子查询中的多个列,例如
where (AgencyID, Program, ActivityEndDate) not in
( select AgencyID, Program, ActivityEndDate
from ... )
你最好切换到NOT EXISTS(如果有任何NULL):
select * from ActualDischarges as aD
where NOT EXISTS
(select * from LoggedDischarges as lD
where aD.AgencyID = lD.AgencyID
and aD.Program = lD. Program
and aD.ActivityEndDate= lD.ActivityEndDate)
答案 1 :(得分:1)
对于这种类型的匹配,我建议在末尾使用带有IS NULL的LEFT JOIN来确定第二个表没有记录:
SELECT a.*
FROM ActualDischarges AS a
LEFT JOIN LoggedDischarges AS l
ON agencyid=agencychildid
AND a.program=l.program
AND a.ActivityEndDate=l.ActivityEndDate
WHERE l.agencyid IS NULL
作为旁注,绝对避免在这样的情况下使用多个IN语句WHERE NOT IN(...)AND NOT IN(...)等等,因为你最终排除了与LoggedDischarges中不同记录匹配的记录原因,很少是理想的结果。