次のテーブル構造があります。
Id, SpouseId
1, 2
2, 1
基本的に、これは 2 人が結婚しているかどうかを示します。
データベース内の夫婦を返す mysql クエリを作成する必要があります。
SpouseId が空でないかどうかを確認するだけだと最初に考えましたが、ID が存在するかどうかも確認する必要があるため、それだけでは十分ではありません。
次のテーブル構造があります。
Id, SpouseId
1, 2
2, 1
基本的に、これは 2 人が結婚しているかどうかを示します。
データベース内の夫婦を返す mysql クエリを作成する必要があります。
SpouseId が空でないかどうかを確認するだけだと最初に考えましたが、ID が存在するかどうかも確認する必要があるため、それだけでは十分ではありません。
それ自体に対してを使用してINNER JOIN
、両方のパートナーが存在するペアを返します。このように、JOIN 条件が満たされるためには、配偶者が空でないだけでなく、一致する行が である必要がありますId
。うまくいけば、SpouseId
対応する aSpouseId
の が他のものではない場合Id
(つまり、A -> B と結婚 -> C と結婚)がないことを願っています。
SELECT
p.Id AS person,
s.Id AS spouse
From
people p
INNER JOIN people s ON p.SpouseId = s.Id
/* Should eliminate the duplicate, since one pair will always have
a higher id for the person than the spouse, and the other is lower. */
WHERE p.person > p.spouse
ただし、各パートナーは とId
の両方に表示されるため、これはペアごとに 2 行を返すことに注意してくださいSpouseId
。
各WHERE
夫婦の行の 1 つを削除するために句が追加されました。アイデアは、各ペアに高い ID と低い ID があるということです。高い ID を持つペアperson
が保持され、低い ID を持つペアperson
が削除されます。