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

Sql 根据三个条件创建表1减去表2的表,sql,Sql,我有一张对数表和另一张实际数表 我正在尝试生成一个查询,该查询将根据AgencyID、Program和ActivityEndDate为我提供来自ActualDischarges的所有字段,不包括已经在LoggedDischarges中的字段 一个客户端可以在多个程序中,并且可以在同一天从多个程序中释放。我需要确保每个程序都有日志记录 这就是我所拥有的,但不确定如何添加其他标准 select * from ActualDischarges where (agencychildid

我有一张对数表和另一张实际数表

我正在尝试生成一个查询,该查询将根据AgencyID、Program和ActivityEndDate为我提供来自ActualDischarges的所有字段,不包括已经在LoggedDischarges中的字段

一个客户端可以在多个程序中,并且可以在同一天从多个程序中释放。我需要确保每个程序都有日志记录

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

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


Steve Hathaway

对于这种类型的匹配,我建议使用结尾处带有IS NULL的左连接,以确定第二个表没有记录:

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语句。因为最终会出于不同的原因排除与LoggedDischarges中不同记录匹配的记录,这很少是期望的结果。

对于这种类型的匹配,我建议使用结尾处带有IS NULL的左连接来确定第二个表没有记录:

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语句。因为最终会出于不同的原因排除与LoggedDischarges中不同记录匹配的记录,这很少是期望的结果。

对于这种类型的匹配,我建议使用结尾处带有IS NULL的左连接来确定第二个表没有记录:

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语句。因为最终会出于不同的原因排除与LoggedDischarges中不同记录匹配的记录,这很少是期望的结果。

对于这种类型的匹配,我建议使用结尾处带有IS NULL的左连接来确定第二个表没有记录:

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(…)和非IN(…)等情况下使用多个IN语句,因为最终会出于不同的原因排除与LoggedDischarges中不同记录匹配的记录,这很少是理想的结果。

即使您的DBMS在子查询中支持多个列,如

where (AgencyID, Program, ActivityEndDate) not in
   ( select AgencyID, Program, ActivityEndDate 
     from ... )
最好切换到“不存在”(如果为空):


即使DBMS在子查询中支持多列,如

where (AgencyID, Program, ActivityEndDate) not in
   ( select AgencyID, Program, ActivityEndDate 
     from ... )
最好切换到“不存在”(如果为空):


即使DBMS在子查询中支持多列,如

where (AgencyID, Program, ActivityEndDate) not in
   ( select AgencyID, Program, ActivityEndDate 
     from ... )
最好切换到“不存在”(如果为空):


即使DBMS在子查询中支持多列,如

where (AgencyID, Program, ActivityEndDate) not in
   ( select AgencyID, Program, ActivityEndDate 
     from ... )
最好切换到“不存在”(如果为空):


Left join和filter by null将给出所需的结果。您使用的是哪个数据库?请添加相关标记。左联接和按null筛选将得到所需的结果。您使用的是哪个数据库?请添加相关标记。左联接和按null筛选将得到所需的结果。您使用的是哪个数据库?请添加相关标记。左联接和按null筛选将得到所需的结果。您使用的是哪个数据库?请添加相关标签。谢谢,这是我需要的。我试着去做这个,但是在错误的地方。谢谢你,这是我需要的。我试着去做这个,但是在错误的地方。谢谢你,这是我需要的。我试着去做这个,但是在错误的地方。谢谢你,这是我需要的。我试图在错误的地方做And。谢谢你,我也会尝试这种方法。谢谢你,我也会尝试这种方法。谢谢你,我也会尝试这种方法。谢谢你,我也会尝试这种方法。谢谢你,我也会尝试这种方法。