【问题标题】:MySql Query for one to many relationshipMySql查询一对多关系
【发布时间】:2016-12-17 09:36:47
【问题描述】:

在 mysql 查询中遇到问题,尝试使用 mysql join 但没有得到预期的输出。

我想要所有班级,所有学生的总评分分数。每个班级都有很多学生。学生有很多或没有奖学金

类表是这样的

+---------------------+
|   id      classname |
+---------------------+
|   1            10   |
|   2            11   |
|   3            12   |
+---------------------+

学生表的样子,classid是外键

+------------------------------------+
|   id     classid       studentname |
+------------------------------------+
|   1        1            xembine    |
|   2        1            denial     |
|   3        2            suzone     |
|   4        3            rosh       |
|   5        2            broad      |
|   6        1            bell       |
|   7        3            martin     |
|   8        1            jroff      |
+------------------------------------+

评分表的样子,studentid是外键

+------------------------------------+
|   id      studentid    ratingscore |
+------------------------------------+
|   1           1         4000       |
|   2           1         10000      |
|   3           5         20000      |
|   4           2         1000       |
|   5           6         2222       |
|   6           1         5000       |
|   7           6         12000      |
|   8           3         3800       |
|   9           5         7500       |
+------------------------------------+

这里:第 3 班的学生还没有评分分数。所以需要该学生的评分分数为零。

预期输出:-

+-------------------------------------------------------------+
|   studentname  studentid  classid   classname   ratingscore |
+-------------------------------------------------------------+
|     xembine       1         1           10         19000    |
|     denial        2         1           10          1000    |
|     suzone        3         2           11          3800    |
|     rosh          4         3           12            0     |
|     broad         5         2           11          27500   |
|     bell          6         1           10          2222    |
|     martin        7         3           12            0     |
|     jroff         8         1           10            0     |
+-------------------------------------------------------------+

【问题讨论】:

  • 您提出的查询在哪里?我们不会为你做这件事。但是如果你想在没有匹配的时候得到一个空行,你需要使用LEFT OUTER JOIN。
  • 那么,您的尝试过查询在哪里?

标签: php mysql


【解决方案1】:
select s.studentname, s.id as studentid,s.classid,c.classname,sum(ifnull(r.ratingscore,0)) as ratingscore from student s
join class c on c.id=s.classid
left outer join rating r on r.studentid=s.id
group by s.studentname,r.studentid,s.classid,c.classname

【讨论】:

    【解决方案2】:

    你试过了吗?

    SELECT s.studentname,  s.studentid, c.classid, c.classname, SUM(r.ratingscore)
      FROM student as s
    INNER JOIN class c on c.classid = s.classid
    LEFT OUTER JOIN ratingscore rs ON s.studentid = rs.studentid
    GROUP BY s.studentname,  s.studentid, c.classid, c.classname
    ORDER BY s.studentid
    

    如果有学生没有上课,则必须将内连接更改为左外连接

    【讨论】:

      【解决方案3】:
      SELECT s.studentname AS studentname,  s.id AS studentid, c.id AS classid, c.classname AS classname, SUM(r.ratingscore) AS ratingscore
      FROM student AS s
      INNER JOIN class AS c ON c.id = s.classid
      LEFT JOIN rating r ON r.studentid = s.id
      GROUP BY s.id
      ORDER BY s.id
      

      【讨论】:

        猜你喜欢
        • 2019-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-02
        相关资源
        最近更新 更多