NATURALなJOIN
まあ広告は適当。
SQLでjoin方法は幾つかありますが、現状ではほぼonしか使っていません。
ただまあ、他の方法も知っておくと、人のSQLのQAをするときに便利なのでメモ。
・on
select * from table_a join table_b on (table_a.id = table_b.s_id and table_b.status is null)
table_a.id = table_b.s_idで明示的にjoinしてる。
他に条件を書けたり、色々出来るので、現状では殆どコレ。
・using
select * from table_a join table_b using (id)
idという項目名が同じ時に使える。けど、これやるとselect句で使えるidはどっちのテーブルでも無くなるので、テーブル名を頭につけることが出来ない。
・natural
select * from table_a natural inner join table_b
同じカラム名があったら結合条件に勝手にする。ちなみに複数あったら全部結合条件に使っちゃう。usingの自動版だと思えばいいと思うけど、入ってるテーブル構造を未来永劫信用しないと危ないので、ちょっと危険。
参考:
https://www.javadrive.jp/mysql/join/index3.html
まあ広告は適当。
SQLでjoin方法は幾つかありますが、現状ではほぼonしか使っていません。
ただまあ、他の方法も知っておくと、人のSQLのQAをするときに便利なのでメモ。
・on
select * from table_a join table_b on (table_a.id = table_b.s_id and table_b.status is null)
table_a.id = table_b.s_idで明示的にjoinしてる。
他に条件を書けたり、色々出来るので、現状では殆どコレ。
・using
select * from table_a join table_b using (id)
idという項目名が同じ時に使える。けど、これやるとselect句で使えるidはどっちのテーブルでも無くなるので、テーブル名を頭につけることが出来ない。
・natural
select * from table_a natural inner join table_b
同じカラム名があったら結合条件に勝手にする。ちなみに複数あったら全部結合条件に使っちゃう。usingの自動版だと思えばいいと思うけど、入ってるテーブル構造を未来永劫信用しないと危ないので、ちょっと危険。
参考:
https://www.javadrive.jp/mysql/join/index3.html
コメント