select count(*) count from (
select c.id from clients c
inner join subcontractors sc on sc.client_id=c.id
group by c.id
having count(*) in (1, 2)
) sub;
你应该使用多对多关系 我回答是因为你想从我这里知道为什么你应该使用多对多关系而不是一对多关系。因为你说过 客户有许多分包商。分包商可以有很多客户。 所以这两个表应该是独立的,为了交互,可以使用一个称为 many to many 关系。否则,您的查询将更加复杂,并且出于简单的原因,您需要更多的嵌套子查询。 我修改了你的结构
clients
-> id
-> name
-> status
subcontractors
-> id
-> name
client_subcontractors (this is your many to many relation)
-> id
-> client_id
-> subcontractor_id
试试这个:
SELECT COUNT(`client_id`) AS total_client
FROM `client_subcontractors`
WHERE `subcontractor_id` IN (1, 2)
GROUP BY `client_id`
HAVING COUNT(*) = 2;
2条答案
按热度按时间8cdiaqws1#
6yt4nkrj2#
你应该使用多对多关系
我回答是因为你想从我这里知道为什么你应该使用多对多关系而不是一对多关系。因为你说过
客户有许多分包商。分包商可以有很多客户。
所以这两个表应该是独立的,为了交互,可以使用一个称为
many to many
关系。否则,您的查询将更加复杂,并且出于简单的原因,您需要更多的嵌套子查询。我修改了你的结构
试试这个:
查看SQLFiddle演示