1

次のテーブル構造があります。

Id, SpouseId
1, 2
2, 1

基本的に、これは 2 人が結婚しているかどうかを示します。

データベース内の夫婦を返す mysql クエリを作成する必要があります。

SpouseId が空でないかどうかを確認するだけだと最初に考えましたが、ID が存在するかどうかも確認する必要があるため、それだけでは十分ではありません。

4

1 に答える 1

3

それ自体に対してを使用して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が削除されます。

于 2012-05-06T00:10:12.670 に答える