首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL关系表记录计数

MySQL关系表记录计数
EN

Stack Overflow用户
提问于 2018-01-12 04:45:10
回答 2查看 43关注 0票数 0

我有两张桌子:clientssubcontractors。客户有很多分包商。分包商可以有很多客户。

我的模式如下所示:

代码语言:javascript
复制
clients
->id
->name
->status

subcontractors
->id
->client_id
->name

我的问题是如何计算有1至2个分包商的客户?

谢谢。我试过检查这个:

SELECT COUNT across one-to-many relationship

但这似乎与我试图计算的相反。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-12 04:47:57

代码语言:javascript
复制
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;
票数 0
EN

Stack Overflow用户

发布于 2018-01-12 09:07:03

您应该使用多到多个关系

我之所以回答这个问题,是因为您想从我这里了解为什么您应该使用多到多关系,而不是one to relation 。因为你说

客户有很多分包商。分包商可以有很多客户。

因此,您的两个表应该是独立的,对于交互,您可以使用一个称为many to many关系的映射表。否则,您的查询将更加复杂,并且您需要更多嵌套的子查询,原因很简单。

我修改了你的结构

代码语言:javascript
复制
clients
-> id
-> name
-> status

subcontractors
-> id
-> name

client_subcontractors (this is your many to many relation)
-> id
-> client_id
-> subcontractor_id

试试这个:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48219698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档