お世話になります。Mysql(バージョン5.7.23)あるSQL文を勉強しております。
以下のようなテーブルとデータを用意しました。
CREATE TABLE main_table ( `mainID` int(11) NOT NULL, `name` varchar(50) NOT NULL, PRIMARY KEY (`mainID`) ); CREATE TABLE sub_table ( `subID` int(11) NOT NULL, `main1` int(11) NOT NULL, `main2` int(11) NOT NULL DEFAULT 0, `main3` int(11) NOT NULL DEFAULT 0, PRIMARY KEY (`subID`) )
main_table(mainIDは1から始まります)
mainID | name |
---|---|
1 | name1 |
2 | name2 |
3 | name3 |
4 | name4 |
5 | name5 |
6 | name6 |
7 | name7 |
8 | name8 |
… | … |
sub_table(subIDは1から始まります)
subID | main1 | main2 | main3 |
---|---|---|---|
1 | 1 | 2 | 0 |
2 | 2 | 1 | 4 |
3 | 4 | 5 | 6 |
4 | 3 | 1 | 2 |
5 | 8 | 1 | 0 |
… | … | … | … |
このとき各mainIDに対してmain1またはmain2またはmain3に登録されているデータのSELECT文を考えています。
例えば、mainIDが8まで、subIDが5まで登録されていたら以下のように出力されるSELECT文を考えています。
mainID | name | 件数 |
---|---|---|
1 | name1 | 4(subID=1のmain1、subID=2のmain2、subID=4のmain2、subID=5のmain2の計4件) |
2 | name2 | 3(subID=1のmain2、subID=2のmain1、subID=4のmain3の計3件) |
3 | name3 | 1(subID=4のmain1の1件) |
4 | name4 | 2(subID=2のmain3、subID=3のmain1の計2件) |
5 | name5 | 1(subID=3のmain2の1件) |
6 | name6 | 1(subID=3のmain3の1件) |
7 | name7 | 0(データないので0件) |
8 | name8 | 1(subID=5のmain1の1件) |
私が考えたSQL文は以下の内容ですが、もっと簡単な文にできるかどうか教えてください。
よろしくお願いします。
SELECT `mainID` , name , IFNULL(M1.c1,0) + IFNULL(M2.c2,0) + IFNULL(M3.c3,0) 件数 FROM mysql.main_table LEFT JOIN (SELECT main1, COUNT(main1) c1 FROM sub_table GROUP BY main1) M1 ON M1.main1 = mainID LEFT JOIN (SELECT main2, COUNT(main2) c2 FROM sub_table GROUP BY main2) M2 ON M2.main2 = mainID LEFT JOIN (SELECT main3, COUNT(main3) c3 FROM sub_table GROUP BY main3) M3 ON M3.main3 = mainID ORDER BY `mainID`
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/15 02:22