我的问题与此极为相似:Select rows which are not present in other table
但不同之处在于我从视图而不是另一个表中检索数据。但是,子选择查询不返回任何记录,我省略了INSERT INTO来测试SELECT查询
这是我到目前为止所得到的:
SELECT SourceT.*, DestT.Column1, DestT.Column2
FROM
ViewA SourceT
LEFT OUTER JOIN
TableA DestT
ON
SourceT.Column1 = DestT.Column1 AND
SourceT.Column2 = DestT.Column2 AND
SourceT.Column3 = DestT.Column3 AND
****一切正常,直到此为止
WHERE
DestT.Column1 = NULL AND
DestT.Column2 = NULL AND
DestT.Column3 = NULL
如果我省略了WHERE条件,它会返回SourceT中的所有记录以及Destite中找不到的那些记录的NULL值 - 这样可以正常工作。当我在底部添加WHERE子句时(即使只在一个条件下),它返回零值。
我可以尝试使用DestT.Column1 = NULL或DestT.Column1<> NULL - 仍然没有返回任何内容。我的查询正确返回NULL值,但WHERE条件不运行,或者不允许任何数据通过。
知道这里发生了什么吗?从本质上讲,我试图根据一些条件将视图中的行插入到TableA中,它们尚不存在。
谢谢
答案 0 :(得分:1)
在比较中将=更改为IS,处理NULL略有不同:
WHERE
DestT.Column1 IS NULL AND
DestT.Column2 IS NULL AND
DestT.Column3 IS NULL
如果您的目的地中有一个不可为空的列,您应该只能检查是否为NULL而不是检查多个列 - 如果表中有一个列,则主键是最好的选择。< / p>
答案 1 :(得分:0)
正确的语法是'IS NULL',而不是'= NULL'。
WHERE
DestT.Column1 IS NULL AND
DestT.Column2 IS NULL AND
DestT.Column3 IS NULL