0

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

Tb1 drID schedDate rteID

第二个有:

Tb2 drID FName LName 活动

必须检查 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 并且 drID 在 tb1 中的任何记录中不存在所选的 schedDate。

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

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

4

1 回答 1

1

您可以将您的选择语句设置为子查询,例如:

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 为空的情况,您可以使用NOT EXISTS此 SO 帖子中关于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
       )
于 2012-12-21T15:42:22.537 回答