Tsql 检查值不存在的复杂查询联接

Tsql 检查值不存在的复杂查询联接,tsql,sql-server-2008-r2,Tsql,Sql Server 2008 R2,我正在与一个巨大的质疑挑战作斗争。我有两张桌子,第一张有 Tb1 干燥 schedDate 阿尔泰德 第二个有: Tb2 干燥 FName 名字 活跃的 必须检查Tb1 drID是否为Null或空白,并且在schedDate上是否匹配,drID不能有任何与Tb2.drID匹配的值(对于所选日期),检查Null和“”基本上就是这样做的 SELECT drID, schedDate, rteID FROM Tb1 WHERE (drID IS NULL OR dr

我正在与一个巨大的质疑挑战作斗争。我有两张桌子,第一张有

Tb1 干燥 schedDate 阿尔泰德

第二个有:

Tb2 干燥 FName 名字 活跃的

必须检查Tb1 drID是否为Null或空白,并且在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,并且对于所选的schedDate,在tb1中的任何记录上都不存在drID

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


感谢您在这个重要的节日里提供的帮助。谢谢。

您能将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为空的情况

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的情况,您可以使用
notexists
方法,如本文所述


这正是我所希望的。让我测试一下,然后再给你回复。我编写了很多子查询,试图让它工作。Arg,返回一个错误:当子查询未与EXISTSsorry一起引入时,只能在选择列表中指定一个表达式。。。我应该删除子选择中的额外项目。我已经修改了我的代码。我已经在代码中添加了这一点,它在where子句中,就像你通常做的那样。你可以尝试将日期转换为日期。取决于数据类型是什么;例如,您是否尝试比较字符串和日期
SELECT drID, Fname, LName
FROM   TB2
WHERE  Active = True 
 AND   NOT EXISTS (
       SELECT drID
       FROM   Tb1
       WHERE  (schedDate = @yourDate) 
        AND   Tb1.drID = TB2.drID
       )