プロが教えるわが家の防犯対策術!

マスターテーブル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が等しければカウントするという出力をするためにはどのように書けばいいんでしょうか。
わかりづらい説明で申し訳ありませんがよろしくお願いします。

A 回答 (2件)

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



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
    • good
    • 0

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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!