【问题标题】:MySQL relational table record countMySQL 关系表记录数
【发布时间】:2018-06-21 12:41:08
【问题描述】:

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

我的架构是这样的:

clients
->id
->name
->status

subcontractors
->id
->client_id
->name

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

谢谢。我试过检查这个:

SELECT COUNT across one-to-many relationship

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

【问题讨论】:

  • Clients has many subcontractors. Subcontractors can have many clients. 为什么你使用一对多关系而不是多对多
  • @Imran 我如何使用一对多?你能详细说明一下吗?谢谢。
  • @ackhammer013 检查我的答案

标签: mysql database


【解决方案1】:
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;

【讨论】:

    【解决方案2】:

    你应该使用多对多关系

    我回答是因为你想从我这里知道为什么你应该使用多对多关系而不是一对多。因为你说

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

    所以你的两个表应该是独立的,并且为了交互,你可以使用一个名为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

    【讨论】:

      猜你喜欢
      • 2013-12-10
      • 1970-01-01
      • 2018-04-01
      • 2021-12-30
      • 1970-01-01
      • 2023-03-28
      • 2016-11-01
      • 2014-01-10
      • 1970-01-01
      相关资源
      最近更新 更多