テーブル結合で行を増殖させないポイント
ON句の条件を
- 1対1
- 1対多
にする。
1対1で結合
↑元テーブル
SELECT t4.id, t5.id FROM table4 t4 left join table5 t5 on t4.id = t5.id2
行数は3行のまま。
1対多で結合
↑元テーブル
SELECT t4.id, t5.id2 FROM table4 t4 left join table5 t5 on t4.id = t5.id2
行数は5行のままなので、左側は増殖、右側は増殖していない。
多対多で結合
↑元テーブル
SELECT t4.id, t5.id2 FROM table4 t4 left join table5 t5 on t4.id = t5.id2
9行に増殖している。
id=2と3が2つずつなので 2×2 で4つに増殖。
left joinなのでイメージはこんな感じ↓
1個めの左のid2 = 2 に右のid2 = 2が2個結合。
2個めの左のid2 = 2 に右のid2 = 2が2個結合。
で4つに増える。
DISTINCT・GROUP BYで増殖対策
↑元テーブル
SELECT t4.id2, t5.id2 FROM table4 t4 left join ( select distinct id2 from table5) t5 on t4.id2 = t5.id2
SELECT t4.id2, t5.id2 FROM table4 t4 left join ( select id2 from table5 group by id2) t5 on t4.id2 = t5.id2
どっちのSQLでも同じ結果。