从另一个视图将行插入一个 Table 不存在的行

Insert Rows into One Table that Don't Exist, from Another View

我的问题与此极为相似:Select rows which are not present in other table

但不同之处在于我是从一个视图中检索数据,而不是另一个 table。但是,sub-select 查询没有 return 任何记录,我省略了 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 条件,它会 returnSourceT 中的所有记录以及在 DestT 中找不到的那些记录的 NULL 值 - 这工作正常。当我在底部添加 WHERE 子句时(即使只有一个条件),它 returns 零值。

我可以尝试 DestT.Column1 = NULL 或 DestT.Column1 <> NULL - 仍然没有 returned。我的查询正确returns NULL值但是WHERE条件不运行,或者不允许任何数据通过。

知道这里发生了什么吗?本质上,我试图根据多种条件将视图中的行插入到它们尚不存在的 TableA 中。

谢谢

在您的比较中将 = 更改为 IS,NULL 的处理方式略有不同:

WHERE
DestT.Column1 IS NULL AND
DestT.Column2 IS NULL AND
DestT.Column3 IS NULL

如果您的目标中有一个不可为 null 的列,您应该能够检查它是否为 NULL 而不是检查多个列 - 如果 table 主键将是您最好的选择有一个。

正确的语法是 'IS NULL',而不是“= NULL”。

WHERE
    DestT.Column1 IS NULL AND
    DestT.Column2 IS NULL AND
    DestT.Column3 IS NULL