MYSQL 中的一对多关系会产生错误的结果

One to many relation in MYSQL produces wrong results

我有两个 tables- 学生和科目。学生 table 存储所有学生的列表,科目 table 存储这些学生已注册的所有科目。

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

您可以通过

实现
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 中的某些列进行分组时,它会给出正确的结果,它只会 return 分组中的第一条记录,因此您需要使用 GROUP_CONCAT 才能获得所需的结果return 给定列中所有逗号分隔值的函数。