从另一个视图将行插入一个 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
我的问题与此极为相似: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