2013-11-26 38 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