mysql关系表记录计数

ssm49v7z  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(348)

我有两张table: clients 以及 subcontractors . 客户有许多分包商。分包商可以有很多客户。
我的模式是这样的:

clients
->id
->name
->status

subcontractors
->id
->client_id
->name

我的问题是,如何计算有1到2个分包商的客户?
谢谢。我试着检查这个:
选择一对多关系中的计数
但这似乎和我想数的相反

8cdiaqws

8cdiaqws1#

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;
6yt4nkrj

6yt4nkrj2#

你应该使用多对多关系
我回答是因为你想从我这里知道为什么你应该使用多对多关系而不是一对多关系。因为你说过
客户有许多分包商。分包商可以有很多客户。
所以这两个表应该是独立的,为了交互,可以使用一个称为 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;

查看SQLFiddle演示

相关问题