SQLで苦労したはなし
DBに問い合わの際に
1つのテーブルに対して、いくつレコードがついているか数えたくて、
かなり苦労しました。(日本語があっていないかも、、、)
イメージとしては下の図みたいな感じです!
(本当はテーブルが5、6個結合したのですが、簡易的に記載するので今回は2つに)
reserve_names_table
|id|reserve_name|
|:--|:--:|--:|
|1|yusuke|
|2|kosaku|
|3|reo|
reserves_table
|id|reserve_name_id|
|:--|:--:|--:|
|1|1|
|2|1|
|3|2|
|4|2|
|5|3|
期待する出力は。。。
|id|reserve_name_id|
|:--|:--:|--:|
|1|2|
|2|2|
|3|1|
この結果をどう出せばいいか、めちゃくちゃ考え、検索しました。
rerserve_name_idをまとめる
select reserve_name_id, COUNT(*) as rs from reserves GROUP BY reserve_name_id;
からのテーブル結合しました
select id,rs
from
reserve_names r_name
left outer join (select reserve_name_id, COUNT(*) as rs from reserves GROUP BY reserve_name_id) as rs
on r_name.id = rs.reserve_name_id;
これで期待したデーターが出力できました。
これがわかったら、何個テーブル結合しようが、
応用できるので、とても助かりました!!
(ところどころ記載のある as は書かないとエラー吐きます)