okinawa

IT勉強メモ

【SQL】テーブル結合で行を増殖させないポイント

テーブル結合で行を増殖させないポイント

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

実行結果2

行数は5行のままなので、左側は増殖、右側は増殖していない。

多対多で結合


↑元テーブル

SELECT t4.id, t5.id2 FROM table4 t4
left join table5 t5
on t4.id = t5.id2

実行結果3

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

実行結果4

どっちのSQLでも同じ結果。