Mysql 基于给定表中的外键查找多个表中的行数

Mysql 基于给定表中的外键查找多个表中的行数,mysql,sql,join,Mysql,Sql,Join,我有一个数据库,其中包含我关心的以下表 JobAreas(我要查询其他表的基表) JobSkills(每个工作技能都通过外键(即父项id)属于一个工作区域) 作业(每个作业必须通过外键(即类别id)属于作业区域) UserSkills(此表包含与作业区域相关的作业技能) 我正在连接桌子结构 我正在尝试创建一个SQL查询,它可以为我提供各种工作领域的技能数量、工作数量和人员数量。虽然计算在特定工作领域提供服务的用户似乎很困难,因为这是间接联系的。我尝试使用以下查询获取所有工作区域的技能数量和

我有一个数据库,其中包含我关心的以下表

  • JobAreas(我要查询其他表的基表)
  • JobSkills(每个工作技能都通过外键(即父项id)属于一个工作区域)
  • 作业(每个作业必须通过外键(即类别id)属于作业区域)
  • UserSkills(此表包含与作业区域相关的作业技能)
  • 我正在连接桌子结构

    我正在尝试创建一个SQL查询,它可以为我提供各种工作领域的技能数量、工作数量和人员数量。虽然计算在特定工作领域提供服务的用户似乎很困难,因为这是间接联系的。我尝试使用以下查询获取所有工作区域的技能数量和工作数量

    select
      t.id,
      t.title,
      count(s.parent_id) as skillsCount,
      count(m.category_id) as jobCount
    from
      job_areas t
      left join skill_types s ON s.parent_id = t.id
      left join job_requests m ON m.category_id = t.id 
    group by
      t.id
    
    但它没有给出正确的数据。有没有人能指导我如何实现这一目标


    您正在沿着不同的维度连接。解决此问题的快捷方法是使用
    count(distinct)

    如果每项工作只有少数几个技能和类别,那么这就很好了。如果有多个查询,则需要在
    联接之前进行预聚合
    或使用相关子查询

    select t.id, t.title,
           count(distinct s.parent_id) as skillsCount,
           count(distinct m.category_id) as jobCount
    from job_areas t left join
         skill_types s
         ON s.parent_id = t.id left join
         job_requests m 
         ON m.category_id = t.id 
    group by t.id;