2017-10-04 24 views
0

データベース内の孤立した行の概念と、それらを見つけて削除する方法を理解しようとしていました。データベース内の孤立した行

たとえば、2つのテーブル(人、犬)があり、それらの間に1対1の関係があったので、すべての人が犬を持っていなければならず、すべての犬に所有者が必要です。

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 

これは犬(フレッド)doesntの結果を生成します所有者がいて、NULLとして表示されます。

これはオーナーと一致する必要があるため、これは孤立した行ですか?

これはプライマリ/外部キーがないために発生しますか?

データベース内に孤立した行が見つかりましたか?

答えて

3

あなた自身の質問に答えました。しかし、次の左結合を使用して、孤立した行を探します。

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

これは、一致する所有者がないすべての犬のレコードを返します。

このような状況を回避する1つの方法は、外部キー制約を使用することです。このような制約を受けて、特定の犬の記録が依然としてその所有者を参照していた場合、所有者レコードを削除することはできません。

この回答は間違った木(馬鹿)を吠えるのを防ぐのに役立ちます。

+0

はい、ありがとうございます。孤立した行を見つける最も簡単な方法は何ですか? –

+0

それは概念的にきれいなので、私は上記の答えを好むかもしれません。 'EXISTS'を使ってみることもできます。 –

関連する問題