こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

テーブルごとのカウント

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
となってしまいます。
冷静に考えるとそうなんですが・・・

もしうまく結果を取得できる方法があればご教授いただきたく
よろしくお願いいたします。

投稿日時 - 2008-11-15 23:28:30

QNo.4481709

すぐに回答ほしいです

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

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

投稿日時 - 2008-11-16 12:54:46

お礼

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

投稿日時 - 2008-11-17 16:06:53

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

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

投稿日時 - 2008-11-17 05:54:44

お礼

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

投稿日時 - 2008-11-17 16:07:10

ANo.1

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

投稿日時 - 2008-11-15 23:53:38

お礼

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

投稿日時 - 2008-11-17 16:06:28

あなたにオススメの質問