2013-11-26 36 views
0

我有一個名爲「containers」的表,其中包含一個parent_id子句,用於指定層次結構。SQL通過加入null找到缺失記錄

TABLE containers { 
    id 
    parent_id 
    name 
} 

由於外鍵沒有設置,我試圖找到那些沒有更新的孩子,告訴他們PARENT_ID設置爲NULL被刪除父容器。

SELECT * FROM container c 
RIGHT JOIN container c2 ON c2.parent_id = c.id 
WHERE c.id IS NULL AND c2.parent_id IS NOT NULL 

什麼是正確的查詢?

回答

2

你可能會想要做這樣的事情(提供的ID是PK還是NOT NULL):

SELECT 
    parents.id 
FROM 
    container children 
    LEFT JOIN 
    container parents ON (parents.id = children.parent_id) 
WHERE 
    parents.id IS NULL; 
+0

差不多,但一些「家長」也有一個NULL PARENT_ID因爲它們的根容器。 – Xeoncross

+0

在這種情況下這不會成爲問題:)。如果「id」可能爲NULL,則會出現問題。 – Jan