Tsql 检查值不存在的复杂查询联接
我正在与一个巨大的质疑挑战作斗争。我有两张桌子,第一张有 Tb1 干燥 schedDate 阿尔泰德 第二个有: Tb2 干燥 FName 名字 活跃的 必须检查Tb1 drID是否为Null或空白,并且在schedDate上是否匹配,drID不能有任何与Tb2.drID匹配的值(对于所选日期),检查Null和“”基本上就是这样做的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
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
)