Rya*_*don 1 sql sql-server join
我试图了解数据库中孤立行的概念以及如何找到和删除它们。
举例来说,你有 2 张桌子 (person,dog),它们之间是一对一的关系,所以每个人都必须有一只狗,每只狗都必须有一个主人。
人表:
ID Name
1 James
2 Matt
3 Mike
Run Code Online (Sandbox Code Playgroud)
狗桌:
ID Name Owner_id
1 Sam 1
2 Rex 2
3 Max 3
4 Fred 4
Run Code Online (Sandbox Code Playgroud)
现在,如果我加入了这些表:
SELECT *
FROM Person P
FULL OUTER JOIN Dog D ON P.id = D.Owner_id
Run Code Online (Sandbox Code Playgroud)
这将产生这样的结果:狗 (fred) 没有所有者并且仅显示为 NULL。
因此,这是一个孤立行,因为它应该有一个匹配的所有者吗?
这是否只是由于没有主键/外键引起的?
如何在数据库中找到孤立行?
你有点回答了你自己的问题。但我会使用以下左连接来查找孤立的行:
SELECT d.*
FROM Dog d
LEFT JOIN Person p
ON d.Owner_id = p.ID
WHERE
p.ID IS NULL;
Run Code Online (Sandbox Code Playgroud)
这将返回每个没有匹配所有者的狗记录。
避免这种情况的一种方法是使用外键约束(例如,级联删除 -链接)。有了这样的限制,如果某些狗记录仍然引用该所有者,则不可能删除该所有者记录。
我希望这个答案可以帮助您避免吠错树(woof)。
| 归档时间: |
|
| 查看次数: |
2178 次 |
| 最近记录: |