我有两个表:clients
和subcontractors
。客户有很多分包商。分包商可以拥有许多客户。
我的架构是这样的:
clients
->id
->name
->status
subcontractors
->id
->client_id
->name
我的问题是如何计算其中包含1到2个分包商的客户?
感谢。我试过检查这个:
SELECT COUNT across one-to-many relationship
但似乎这与我想要计算的相反
答案 0 :(得分:0)
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;
答案 1 :(得分:0)
您应该使用多对多关系
我已经回答了,因为你想知道为什么你应该使用多对多关系而不是一对多。因为你说
客户有很多分包商。分包商可以拥有许多客户。
因此,您的两个表应该是独立的,并且为了进行交互,您可以使用这个称为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;