2016-04-15 37 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 
相關問題