复杂查询连接检查该值不存在

时间:2012-12-21 15:33:17

标签: tsql sql-server-2008-r2

我正在努力应对查询的巨大挑战。我有两张桌子,第一张有

Tb1中 drID schedDate rteID

第二个:

Tb2的 drID FName参数 LName的 活性

必须检查Tb1 drID是否为空或空白并且匹配schedDate并且drID不能具有与所选日期的Tb2.drID匹配的任何值,检查Null并且“基本上执行此操作。”

SELECT drID, schedDate, rteID
FROM            Tb1
WHERE        (drID IS NULL OR drID = '') AND (schedDate = 11 / 1 / 2012)

从所有这些我需要返回TB2 drID,Fname,LName其中Active = True并且tb1中所选schedDate的任何记录都不存在drID。

任何可能的日期都有许多tb1 rteID记录。

感谢您对此提供的任何帮助以及巨大的假期谢谢。

1 个答案:

答案 0 :(得分:1)

您可以将select语句设为子查询,例如:

SELECT drID, Fname, LName
FROM   TB2
WHERE  Active = True 
 AND   drID NOT IN (
       SELECT drID
       FROM   Tb1
       WHERE  (drID IS NULL OR drID = '')
        AND  (schedDate = 11 / 1 / 2012)
       )

修改
要处理schedDate为null的情况,那么

SELECT drID, Fname, LName
FROM   TB2
WHERE  Active = True 
 AND   drID NOT IN (
       SELECT drID
       FROM   Tb1
       WHERE  (drID IS NULL OR drID = '')
        AND  (schedDate = @yourDate OR schedDate IS NULL)
       )

编辑2
要处理drID为null的情况,您可以使用此SO帖子中强调的NOT EXISTS方法NOT IN vs NOT EXISTS

SELECT drID, Fname, LName
FROM   TB2
WHERE  Active = True 
 AND   NOT EXISTS (
       SELECT drID
       FROM   Tb1
       WHERE  (schedDate = @yourDate) 
        AND   Tb1.drID = TB2.drID
       )