「tc_person」という個人テーブルと「tc_marriage」という結婚テーブルがあります。個人テーブルからいくつかの列と、パートナーの ID を表す 1 つの列を選択したいと考えています。
結婚テーブルには 2 人の pid_1 と pid_2 が含まれていますが、カップルのエントリは 1 つだけであり、カップル ID の順序は異なる場合があることが重要です。ここにテーブルがあります:
tc_person:
| id | name | lastname |
--------------------------------------
| 4 | peter | smith |
| 5 | sarah | smith |
tc_marriage:
| id | pid_1 | pid_2 |
--------------------------------------
| 0 | 5 | 4 |
| 1 | 7 | 9 |
私のサブクエリは、元の select ステートメントの前に全体として解釈されるようです。サブクエリが複数の行を返すというエラーが表示されます。
SELECT p.id, p.name, p.lastname,
(SELECT m.pid_1 FROM tc_marriage m WHERE m.pid_2 = p.id UNION
SELECT m.pid_2 FROM tc_marriage m WHERE m.pid_1 = p.id) as partner_id
FROM tc_person p WHERE p.lastname LIKE 'smith';
次の出力を探しています。
| id | name | lastname | partner_id |
-----------------------------------------------------
| 4 | peter | smith | 5 |
| 5 | sarah | smith | 4 |
これは、単一のクエリだけでも可能ですか? おそらく、私がかなりの SQL 初心者であることがわかります。多分あなたたちは助けることができます。