• ベストアンサー

テーブルごとのカウント

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 となってしまいます。 冷静に考えるとそうなんですが・・・ もしうまく結果を取得できる方法があればご教授いただきたく よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

サブクエリはどうでしょう。 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

CHABRIS
質問者

お礼

ご教授いただきありがとうございました。 nda23様の方法でうまくいきました。 ありがとうございました

その他の回答 (2)

  • masa6272
  • ベストアンサー率66% (93/140)
回答No.3

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でも平気ですが、通常はエラーになるんで、無害な集約関数を使っています。

CHABRIS
質問者

お礼

ご教授いただきありがとうございました。 nda23様の方法でうまくいきました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

テーブルAとB~Dをそれぞれ別個にINNER JOINして、UNIONで繋いで COUNTしてみては?

CHABRIS
質問者

お礼

ご教授いただきありがとうございました。 nda23様の方法でうまくいきました。

関連するQ&A