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

解決済みの質問

複数テーブルの結合

マスターテーブル1つと、子テーブルが複数存在して子テーブルにはマスターテーブルのidを格納するフィールドがあり参照しなくなったときにはそのidを消去するといったデータベースがあったときにマスターIDごとに子テーブルのどれか1つでも参照していればカウントするみたいなSQLをつくりたいんですが

select count(m.id) from master m
inner join a on
m.id = a.m_id
inner join b on
m.id = b.m_id
inner join c on
m.id = c.m_id
group by m.id

みたいなSQLだとAにデータが存在しなければB以降に存在しても期待した結果が出力されません。A、B、Cいずれかのm_idとマスター側のIDが等しければカウントするという出力をするためにはどのように書けばいいんでしょうか。
わかりづらい説明で申し訳ありませんがよろしくお願いします。

投稿日時 - 2011-04-18 20:52:39

QNo.6677689

困ってます

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

仕様がよくわかりませんね。

a,b,cにはそれぞれmのidが振られるとして、aのテーブルにmのidはダブりがあるのか?
aとbの両方に同じm.idがある場合、aだけ数えればいいのか、aとbの両方いるのか?

ざっくりこんな感じ?

select m.id,sum(count) as count from master as m
left join (
select id,count(id) as count from a group by id
union all select id,count(id) as count from b group by id
union all select id,count(id) as count from c group by id
) as sub
on m.id=sub.id
group by m.id

投稿日時 - 2011-04-19 11:10:58

ANo.2

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

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

回答(2)

ANo.1

inner joinではダメでしょ。
試験してませんが、left joinに変更してみてください。

select count(m.id) from master m
left join a on
m.id = a.m_id
left join b on
m.id = b.m_id
left join c on
m.id = c.m_id
group by m.id

投稿日時 - 2011-04-18 21:16:10

あなたにオススメの質問