【问题标题】:One to many relation in MYSQL produces wrong resultsMYSQL 中的一对多关系会产生错误的结果
【发布时间】:2015-06-29 07:16:39
【问题描述】:

我有两张桌子——学生和科目。学生表存储所有学生的列表,科目表存储这些学生已注册的所有科目。

CREATE TABLE students
    (`id` int, `name` varchar(7));

INSERT INTO students
    (`id`, `name`)
VALUES
    (1, 'Jason'),
    (2, 'Matt'),
    (3, 'Abram')
    ;

CREATE TABLE subjects
    (`id` int,`student_id` int, `subject` varchar(15));

INSERT INTO subjects
    (`id`,`student_id`, `subject`)
VALUES
    (1,1, 'Math'),
    (2,1, 'Physics'),
    (3,2, 'Chemistry'),
    (4,2, 'Math'),
    (5,2, 'English'),
    (6,3, 'Chemistry')
    ; 

在执行以下查询时

SELECT STUD.id,STUD.name,SUB.subject 
FROM students AS STUD 
LEFT JOIN subjects AS SUB
ON STUD.id=SUB.student_id
;

给出这样的结果集(这不是我想要得到的)

++++++++++++++++++++++++++++++++++++
id     | name  | subject           |
++++++++++++++++++++++++++++++++++++
| 1    | Jason | Math              |
------------------------------------
| 1    | Jason | Physics           |
------------------------------------
| 2    | Matt  | Chemistry         |
------------------------------------
| 2    | Matt  | Math              |
------------------------------------
| 2    | Matt  | English           |
------------------------------------
| 3    | Abram | Chemistry         |
------------------------------------

学生在列表中重复。

当我尝试时

SELECT STUD.id,STUD.name,SUB.subject 
FROM students AS STUD 
LEFT JOIN subjects AS SUB
ON STUD.id=SUB.student_id
GROUP BY STUD.id
;

我明白了(这又是错误的)

++++++++++++++++++++++++++++++++++++
id     | name  | subject           |
++++++++++++++++++++++++++++++++++++
| 1    | Jason | Math              |
------------------------------------
| 2    | Matt  | Chemistry         |
------------------------------------
| 3    | Abram | Chemistry         |
------------------------------------

我想要的结果如下所示:

++++++++++++++++++++++++++++++++++++++++++++++++
id     | name  | subject                       |
++++++++++++++++++++++++++++++++++++++++++++++++
| 1    | Jason | Math, Physics                 |
------------------------------------------------
| 2    | Matt  | Chemistry,Math ,English       |
------------------------------------------------
| 3    | Abram | Chemistry                     |
------------------------------------------------

我是关系数据库的新手。 为什么 group by 没有给出正确的结果? 提前致谢。

SQL FIDDLE

【问题讨论】:

    标签: mysql database join relational-database one-to-many


    【解决方案1】:

    你可以通过

    SELECT STUD.id,STUD.name,GROUP_CONCAT(SUB.subject) as subject
    FROM students AS STUD 
    LEFT JOIN subjects AS SUB
    ON STUD.id=SUB.student_id
    GROUP BY STUD.id;
    

    实际上,当您在 sql 中按某个列分组时,它会给出正确的结果,它只会返回组中的第一条记录,因此对于您想要的结果,您需要使用 GROUP_CONCAT 函数返回给定列中的所有逗号分隔值。

    【讨论】:

      猜你喜欢
      • 2019-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-24
      • 2015-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多