2016-04-15 62 views
0

我的问题是极其类似: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 

如果我离开了那里的条件,它返回从SourceT的所有记录与NULL在DestT没有发现这些记录的值一起 - 这工作得很好。当我在底部添加WHERE子句时(即使只有一个条件),它会返回零值。

我可以尝试Dest​​T.Column1 = NULL,或DestT.Column1 <> NULL - 仍然没有返回。我的查询正确返回NULL值,但WHERE条件不起作用,或者不允许任何数据通过。

任何想法这里发生了什么?从本质上讲,我试图根据许多条件将视图中的行插入到表A中并不存在的行中。

谢谢

+0

有人吗?我也尝试添加到左边的条件DestT.Column1 = NULL,没有运气JOIN:/ – SomeOne

+0

我有工作没有内部连接,并添加以下: WHERE NOT EXISTS \t(SELECT * FROM表 \t WHERE ...条件) 但该死的查询是缓慢@超过2分钟,每个表中10,000条记录? – SomeOne

回答

1

更改=到在你的比较,NULL的处理方式稍有不同:

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

如果你有你的目的地的非可空列,你应该只能够检查那是NULL而不是检查几列 - 如果表中有一个,主键将是最好的选择。

+0

伟大的东西,我不好受不注意。这也让我的查询时间达到了非常可接受的4秒。荣誉:) – SomeOne

0

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

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