2011-09-23 70 views
0

我正在編寫代碼來擊中保存在MySQL數據庫中的樹結構,每個節點存儲其父級的ID或者如果它是樹的根,則爲NULL。在查詢它嘗試獲取所有葉節點的過程中,我注意到一些奇怪的事情。SQL NOT IN需要雙層?

也就是說,該查詢不會產生任何結果:

SELECT * 
FROM tree_table 
WHERE node_id NOT IN(SELECT parent_node_id FROM tree_table) 

,而這其中產生的結果我追求:

SELECT * 
FROM tree_table 
WHERE node_id NOT IN(
    SELECT node_id 
    FROM tree_table 
    WHERE node_id IN(SELECT parent_node_id FROM tree_table)) 

這似乎是不說竟然放棄了我的麻煩。這是否與我誤解的操作秩序或類似情況有關?

+0

查找 'NOT IN' 和NULLS –

回答

4

如果

SELECT parent_node_id FROM tree_table 

返回一個空當中它的結果集,那麼查詢

SELECT * 
FROM tree_table 
WHERE node_id NOT IN(SELECT parent_node_id FROM tree_table) 

的其餘部分不會產生任何結果。

NOT IN clause and NULL values(許多相關的問題之一)