我对sql存在问题'存在'声明,我将非常感谢任何帮助 让我解释一下我需要完成的任务。
我有两个表,我希望从table1中获取匹配的记录,这些记录也会在table2中退出。直到这个,很简单。但是,我还希望从table1获取这些记录以及Table1中具有特定列NULL的匹配记录。换句话说,我需要从Table1中获取这些记录,或者它们存在于Table2中,或者它们具有特定的列NULL。我编写了以下查询来完成此任务。
CREATE TABLE #Table1(ID INT, Column2 INT NULL)
CREATE TABLE #Table2(ID INT)
INSERT INTO #Table1 VALUES(1, NULL)
INSERT INTO #Table2 VALUES(2)
select * from #Table1
WHERE EXISTS (SELECT NULL from #Table2 where #Table2.ID = #Table1.ID OR #Table1.Column2 IS NULL)
DROP TABLE #Table1;
DROP TABLE #Table2;
当Table2不为空时,此查询有效。但是,如果Table2为空,则IS NULL条件不起作用。
为了解决这个问题,我还尝试添加一个虚拟记录,以防Table2因添加联合而为空,但它也无法解决我的问题,因为当我得到0条记录时总会有记录。
喜欢这个
select * from #Table1
WHERE EXISTS (SELECT ID WHERE NOT EXISTS (SELECT * FROM #Table2)
UNION
SELECT NULL from #Table2 where #Table2.ID = #Table1.ID OR #Table1.Column2 IS NULL)
注意:我知道这可以使用连接来解决,但我想使用Exists语句来解决它,因为这是大型系统的一部分,它根本无法转换为连接。我已将上述内容作为一个简单的场景。
任何形式的帮助都将受到高度赞赏。
答案 0 :(得分:0)
这会有用吗?
WHERE EXISTS (SELECT 1 from #Table2 where #Table2.ID = #Table1.ID) OR #Table1.Column2 IS NULL
答案 1 :(得分:0)
将条件移到EXISTS
之外。它更接近于你如何描述问题:
select t1.*
from #Table1 t1.
WHERE t1.Column2 IS NULL OR
EXISTS (SELECT 1 from #Table2 t2 where t2.ID = t1.ID);
注意:
EXISTS (SELECT NULL . . . )
作品,但我发现它具有很强的误导性。在实践中,NULL
通常代表缺少值,因此结果是一些认知失调。此外,SELECT 1
更容易输入。