2014-07-08 143 views
0

想,如果有人可以解釋爲什麼我的查詢是不是得到所需要的結果的SQLiteLEFT JOIN查詢失敗

我有兩個表

表A中包含許多行了一個名爲picklist_id列中的值重複,我試圖得到這些獨特的價值,然後檢查,看看這個選擇列表ID存在於表二。這是我有,但我只是得到一個空的結果

SELECT distinct(pt.picklist_id) from picklisttable pt LEFT JOIN pickingtable p on 
pt.picklist_id = p.picklist_id where p.picklist_id = null 

有人能指出我在正確的方向嗎?我希望表中的picklist_id返回,如果它不存在於表b中

+0

您不能使用packlist_id離開連接,然後要求它爲空。 – Bob

+0

@GordonLinoff我的原始查詢有一個獨特的pt.picklist_id包裝,我刪除它進行測試,並忘記在發佈之前再次添加它,我現在編輯我的q – dave

+0

@Bob - 那麼你會如何建議我這樣做?這是關於我的sql知識的延伸! – dave

回答

2

這應該是IS NULL,而不是= NULL。

SELECT pt.picklist_id 
FROM picklisttable pt 
LEFT JOIN pickingtable p on pt.picklist_id = p.picklist_id 
WHERE p.picklist_id = null; 

當要求存在數據時,EXISTS子句通常更具可讀性,或者IN子句僅處理一列時。

SELECT pt.picklist_id 
FROM picklisttable pt 
WHERE NOT EXISTS (select * from pickingtable p where pt.picklist_id = p.picklist_id); 

SELECT pt.picklist_id 
FROM picklisttable pt 
WHERE pt.picklist_id NOT IN (select p.picklist_id from pickingtable p); 

或處理組,並使用EXCEPT,我認爲更可讀:

SELECT picklist_id FROM picklisttable 
EXCEPT 
SELECT picklist_id FROM pickingtable; 
1

試試這個。除了相同的查詢,而不是= NULLIS NULL

SELECT distinct(pt.picklist_id) from picklisttable pt LEFT JOIN pickingtable p on 
pt.picklist_id = p.picklist_id where p.picklist_id IS null 
+0

謝謝,+1您的回答,但會將@thorsten標記爲完整性並提供其他選項 – dave

0

爲了您的where子句中,嘗試 「p.picklist_id爲空」而不是「p.picklist_id = null」