我试图了解数据库中孤立行的概念以及如何找到和删除它们。
比如说你有两张桌子(人,狗),他们之间有一对一的关系,所以每个人都必须有一只狗,每只狗都必须有一个主人。
人员表:
ID Name
1 James
2 Matt
3 Mike
狗桌:
ID Name Owner_id
1 Sam 1
2 Rex 2
3 Max 3
4 Fred 4
现在如果我用这些表加入:
SELECT *
FROM Person P
FULL OUTER JOIN Dog D ON P.id = D.Owner_id
这会产生一个结果,其中dog(fred)没有拥有者并且只显示为NULL。
这是一个孤立的行,因为它应该有匹配的所有者吗?
这只是由于没有主键/外键引起的吗?
如何在数据库中找到孤立的行?
答案 0 :(得分:3)
你回答了自己的问题。但我会使用以下左连接来查找孤立的行:
SELECT d.*
FROM Dog d
LEFT JOIN Person p
ON d.Owner_id = p.ID
WHERE
p.ID IS NULL;
这将返回没有匹配所有者的每条狗记录。
避免这种情况的一种方法是使用外键约束。有了这样的限制,如果某些狗记录仍然引用该所有者,则无法删除所有者记录。
我希望这个答案可以帮助你避免吠叫错误的树(woof)。