MySQL关系表记录计数

时间:2018-01-12 04:45:11

标签: mysql database

我有两个表:clientssubcontractors。客户有很多分包商。分包商可以拥有许多客户。

我的架构是这样的:

clients
->id
->name
->status

subcontractors
->id
->client_id
->name

我的问题是如何计算其中包含1到2个分包商的客户?

感谢。我试过检查这个:

SELECT COUNT across one-to-many relationship

但似乎这与我想要计算的相反

2 个答案:

答案 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;

检查SQL FIDDLE DEMO