2017-10-04 58 views
0

我想了解數據庫中孤行的概念,以及如何找到並刪除它們。數據庫中的孤行

例如說你有兩張桌子(人,狗),他們之間有一對一的關係,所以每個人都必須有一隻狗,每隻狗都必須擁有一個主人。

Person表:

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 

這將產生一個結果,其中狗(弗雷德)犯規有一個所有者,只是顯示爲NULL。

因此,這是一個孤兒行,因爲它應該有一個匹配的所有者?

這是否只是由於沒有主鍵/外鍵導致的?

如何在數據庫中找到孤行?

回答

3

你有點回答你自己的問題。但我會使用以下左連接來查找孤行:

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

這將返回沒有匹配所有者的每條狗記錄。

避免這種情況的一種方法是採用外鍵約束。有了這樣的限制,如果某些狗記錄仍然引用該擁有者,則不可能刪除擁有者記錄。

我希望這個答案可以幫助你避免吠叫錯誤的樹(woof)。

+0

是的,我理解謝謝。查找孤行的最簡單方法是什麼? –

+0

嗯,我可能更喜歡上面的答案,因爲它在概念上是乾淨的。你也可以嘗試使用'EXISTS',這可能會執行得更快。 –