- ベストアンサー
テーブルごとのカウント
PHP5.2+mysql 5.0.45で開発を行っております。 SQLに関する質問なのですが 以下のことが可能かどうかご教授いただきたく。 4つのテーブルがあります。 (例は適当です。項目の名称等は無視してください。) テーブルA ID Name Kana テーブルB ID NameID Pref City テーブルC ID NameID Tel Fax テーブルD ID NameID email CellPhone とします。 A.ID=1000の時各テーブルのレコード数が A:B:C:D=1:3:2:2となっています。 SQLの出力結果として A.ID A.Name A.Kana B.Count(ID) C.Count(ID) D.Count(ID) という、6項目を出力したいのですが 方法がわかりません。 試してみたのは select A.ID,A.Name,A.Kana,Count(B.ID),Count(C.ID),Count(D.ID) from A left join B on A.ID = B.NameID left join C on A.ID = C.NameID left join D on A.ID = D.NameID where A.ID = 1000 group by A.ID,A.Name,A.Kana ですが 結果、 A.ID = 1000 A.Name = Name A.Kana = Kana Count(B.ID) = 3 Count(C.ID) = 3 Count(D.ID) = 3 となってしまいます。 冷静に考えるとそうなんですが・・・ もしうまく結果を取得できる方法があればご教授いただきたく よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
サブクエリはどうでしょう。 select A.ID,A.Name,A.Kana, (select count(*) from B where B.NameID=A.ID) BCount, (select count(*) from C where C.NameID=A.ID) CCount, (select count(*) from D where D.NameID=A.ID) DCount from A where A.ID=1000 group by A.ID,A.Name,A.Kana
その他の回答 (2)
- masa6272
- ベストアンサー率66% (93/140)
A,B,C,Dの各テーブルでIDは主キーでしょうか? それなら、こういうのが書けます。 select a.id, max(a.name), max(a.kana), count(distinct b.id), count(distinct c.id), count(distinct d.id) from a left join b on a.id=b.nameid left join c on a.id=c.nameid left join d on a.id=d.nameid group by a.id; MySQLでは、max(a.name)の代わりにa.nameでも平気ですが、通常はエラーになるんで、無害な集約関数を使っています。
お礼
ご教授いただきありがとうございました。 nda23様の方法でうまくいきました。
- yambejp
- ベストアンサー率51% (3827/7415)
テーブルAとB~Dをそれぞれ別個にINNER JOINして、UNIONで繋いで COUNTしてみては?
お礼
ご教授いただきありがとうございました。 nda23様の方法でうまくいきました。
お礼
ご教授いただきありがとうございました。 nda23様の方法でうまくいきました。 ありがとうございました