一見同じに見えて全然違うよというお話
以下のようなテーブルを結合する事を考えよう
これをtableA
ID | nama | age |
1 | tom | 10 |
2 | yuki | 10 |
3 | toru | 11 |
4 | marry | 11 |
5 | sam | 11 |
これをtableB
ID | blood | sex |
1 | A | man |
2 | A | girl |
3 | B | man |
4 | O | girl |
5 | AB | man |
select * from tableA left join tableB on tableA.ID = tableB.ID where sex = 'man'
こちらの結果は以下
ID | nama | age | blood | sex |
1 | tom | 10 | A | man |
3 | toru | 11 | B | man |
5 | sam | 11 | AB | man |
IDで結合したものから最後にmanで絞られる。
さて、こちらはどうか?select * from tableA left join tableB on tableA.ID = tableB.ID AND sex = 'man'
こちらの結果は以下
ID | nama | age | blood | sex |
1 | tom | 10 | A | man |
2 | yuki | 10 | null | null |
3 | toru | 11 | B | man |
4 | marry | 11 | null | null |
5 | sam | 11 | AB | man |
この場合、IDとsexがmanの場合に結合され、一致しなければnullが入る結果になる。
一見似ていてもちょっと違うだけで結果が異なってくる。
参考
https://qiita.com/zaburo/items/548b3c40fee68cd1e3b7
https://www.grapecity.com/developer/support/powernews/column/how_to_database/012/page02.htm
コメント