このようなことをしようとしていますか?
select c.id
,c.name
,count(*)
,count(s.company_id_source) as num_sources
,count(t.company_id_target) as num_targets
from company c
left join company_mapping s on(s.company_id_source = c.id)
left join company_mapping t on(t.company_id_target = c.id)
where c.name like 'foobar%'
group
by c.id
,c.name
having count(s.company_id_source) > 1
or count(t.company_id_target) > 1;
編集:コメントに応じて、以下の新しいクエリ。クエリが返されるようになりました: テーブル company_mapping に関連付けられた行があるかどうかに関係なく、「Foobar」に一致するすべての会社。
- num_sources: 会社がソースである company_mapping 内の行の数。
- num_targets: 会社がターゲットである company_mapping 内の行の数。
- num_mappings: company_mapping 内の「接続」の数 (ソースまたはターゲットのいずれか)
.
select c.id
,c.name
,count(s.company_id_source) + count(t.company_id_target) as num_mappings
,count(s.company_id_source) as num_sources
,count(t.company_id_target) as num_targets
from company c
left join company_mapping s on(s.company_id_source = c.id)
left join company_mapping t on(t.company_id_target = c.id)
where c.name like 'foobar%'
group
by c.id
,c.name;