【问题标题】:mysql count related tablemysql计数相关表
【发布时间】:2014-01-23 16:26:08
【问题描述】:

大家好,我想计算一些条目,但我不知道是否可以通过连接来完成。情况是

我有一张桌子

学生档案

Id | Name
---------
1  | Name1
2  | Name2 
3  | Name3 

student_application 其中 profile_id 与 student_profile.id 相关

     Id | profile_id | Data
     ----------------------
     1      2          data1
     2      2          data2
     3      2          data3

还有表student_holiday

Id | app_id | date
-----------------------
1      2      2014-01-01
2      3      2014-02-02

所以我得到了我所有的student_application

Select sa.id, s.name From student_application sa 
INNER JOIN student_profile s ON s.id =  sa.profile_id

我想计算一个学生有多少个假期,但我在 student_holiday 表中没有 profile_id。那里我有 app_id,所以我不能做 Left join student_holiday sh ON sh.app_id = sa.id,这不会给出正确的数字。

这里sqlfiddle

提前感谢您的帮助。

【问题讨论】:

  • 那么student_holiday 表和其他两个表之间没有关系?
  • Student_holiday 和 student_application 之间没有关系,student_holiday.app_id = student_application.id,另一个有 student_profile.id = student_application.profile_id 结果必须是这样的,Name2|count(2 ), Name2|count(2), Name2|count(2), 3 次,因为我为那个学生申请了 3 份申请,而且这个个人资料有 2 个假期,我希望这是有道理的

标签: mysql join count


【解决方案1】:

选择 student_profile.ID、student_profile.Name、student_holiday.ID FROM (student_profile INNER JOIN student_holiday ON student_profile.ID = student_holiday.ID) INNER JOIN student_application ON student_holiday.ID = student_application.ID;

给你!!!按照上面的说明匹配所有表格中的ID,这是获得假期的关键。

或与 profile_id 匹配

**选择 student_profile.ID、student_profile.Name、student_holiday.ID FROM (student_profile INNER JOIN student_holiday ON student_profile.ID = student_holiday.ID) INNER JOIN student_application ON Trim(student_holiday.ID) = student_application.profile_id;**

【讨论】:

  • 他提供了一个 sqlfiddle,您只需将这些解决方案插入其中,看看它们是否不起作用
  • 这些查询不起作用。我强烈建议不要回答问题,因为您似乎一直只是在猜测而不是在测试。
【解决方案2】:

这是您加入第三个表的数据:

Select s.name, sa.some_data as application_data,h.some_data as holiday_data 
From student_application sa
INNER JOIN student_profile s ON s.id = sa.profile_id
INNER JOIN student_holiday h  ON h.app_id = sa.id;

请注意,这只会返回应用程序与假期相关联的记录。

然后要计算它们,我们只需:

Select s.name, sa.some_data as application_data,count(h.some_data) as holiday_data 
From student_application sa
INNER JOIN student_profile s ON s.id = sa.profile_id
INNER JOIN student_holiday h  ON h.app_id = sa.id
GROUP BY s.name

请注意,此答案基于您在 sqlfiddle 中使用的字段名(数据 = some_data 和日期 = some_data)

【讨论】:

    猜你喜欢
    • 2011-12-08
    • 2015-01-23
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    相关资源
    最近更新 更多