数据库中的孤立行

时间:2017-10-04 10:42:48

标签: sql sql-server join

我试图了解数据库中孤立行的概念以及如何找到和删除它们。

比如说你有两张桌子(人,狗),他们之间有一对一的关系,所以每个人都必须有一只狗,每只狗都必须有一个主人。

人员表:

 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。

这是一个孤立的行,因为它应该有匹配的所有者吗?

这只是由于没有主键/外键引起的吗?

如何在数据库中找到孤立的行?

1 个答案:

答案 0 :(得分:3)

你回答了自己的问题。但我会使用以下左连接来查找孤立的行:

SELECT d.*
FROM Dog d
LEFT JOIN Person p
    ON d.Owner_id = p.ID
WHERE
    p.ID IS NULL;

这将返回没有匹配所有者的每条狗记录。

避免这种情况的一种方法是使用外键约束。有了这样的限制,如果某些狗记录仍然引用该所有者,则无法删除所有者记录。

我希望这个答案可以帮助你避免吠叫错误的树(woof)。