根据三个条件创建表1减去表2的表

时间:2015-09-24 14:55:48

标签: sql

我有一个LoggedDischarges表和另一个ActualDischarges表。

我正在尝试生成一个查询,该查询将向我提供ActualDischarges中的所有字段,但不包括已基于AgencyID,Program和ActivityEndDate的LoggedDischarges中的字段

客户可以在多个程序中,并在同一天从多个程序中解除。我需要确保从每个程序中获取LoggedDischarges。

这就是我所拥有但不确定如何添加其他标准。

    select * from ActualDischarges
    where (agencychildid ) not in
          (select agencyid from LoggedDischarges)

谢谢,

Steve Hathaway

2 个答案:

答案 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中不同记录匹配的记录原因,很少是理想的结果。