我有两张桌子:clients和subcontractors。客户有很多分包商。分包商可以有很多客户。
我的模式如下所示:
clients
->id
->name
->status
subcontractors
->id
->client_id
->name我的问题是如何计算有1至2个分包商的客户?
谢谢。我试过检查这个:
SELECT COUNT across one-to-many relationship
但这似乎与我试图计算的相反。
发布于 2018-01-12 04:47:57
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;发布于 2018-01-12 09:07:03
您应该使用多到多个关系
我之所以回答这个问题,是因为您想从我这里了解为什么您应该使用多到多关系,而不是one to relation 。因为你说
客户有很多分包商。分包商可以有很多客户。
因此,您的两个表应该是独立的,对于交互,您可以使用一个称为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;检查SQL FIDDLE DEMO
https://stackoverflow.com/questions/48219698
复制相似问题