より明確にするために編集 - 元の例の混乱について多くの謝罪
夫婦を表す次のテーブル構造があります。
id | Person | Spouse
______________________
1 | Mary | John
2 | John | Mary
3 | Katy | Bob
4 | Bob | Katy
5 | Mary | John
6 | John | Mary
この例では、メアリーはジョンと結婚し、ケイティはボブと結婚し、別のメアリーは別のジョンと結婚しています。
これらの夫婦のペアを取得するにはどうすればよいですか?
私はこれに近づきました:
SELECT
p.id id1,
q.id id2
FROM
people p
INNER JOIN people q ON
p.person = q.spouse AND
q.person = p.spouse AND
p.id < q.id
ORDER BY p.id
ただし、これは次を返します。
1 | 2 (1st Mary & 1st John)
1 | 6 (1st Mary & 2nd John) *problem*
2 | 5 (1st John & 2nd Mary) *problem*
3 | 4 (Katy & Bob)
5 | 6 (2nd Mary & 2nd John)
1st Mary と 1st John が 1 回だけ結婚していることを確認するにはどうすればよいですか (つまり、上記の問題行を削除します)。
どうもありがとう
この例を作成するための SQL は次のとおりです。
CREATE TABLE people
(`id` int, `person` varchar(7), `spouse` varchar(7))
;
INSERT INTO people
(`id`, `person`, `spouse`)
VALUES
(1, 'Mary', 'John'),
(2, 'John', 'Mary'),
(3, 'Katy', 'Bob'),
(4, 'Bob', 'Katy'),
(5, 'Mary', 'John'),
(6, 'John', 'Mary')
;
SELECT
p.id id1,
q.id id2
FROM
people p
INNER JOIN people q ON
p.person = q.spouse AND
q.person = p.spouse AND
p.id < q.id
ORDER BY p.id
;