San*_*ing 1 mysql left-join group-concat
考虑三个实体作为学生,课程,主题以下是协会 -
student has_many courses,
student has_many subjects.
Run Code Online (Sandbox Code Playgroud)
现在我想使用mysql group_concat,主题名称和课程名称,在课程上左连接,在主题上左联接和group_by student_id获取学生记录.
问题是,group_concat('subjects.name') as subject_names我给了我重复的主题条目,但group_concat('students.name') as student_names给出了唯一的名称.
为什么?
2个左连接是通过每个学生的子行的笛卡尔积乘以行
例
course每个受试者一个值=每个过程重复两次subject每门课程给出一个值=每个科目重复三次修理:
选项1:GROUP_CONCAT(DISTINCT ...)按照MySQL文档使用
在MySQL中,您可以获得表达式组合的连接值.要消除重复值,请使用DISTINCT子句.
选项2:使用UNION ALL +派生表
SELECT
Student, MAX(CourseConcat), MAX(SubjectConcat)
FROM
(
-- 2 separate SELECTs here
.. student LEFT JOIN course ...
UNION ALL
.. student LEFT JOIN subjects...
) T
GROUP BY
Student
Run Code Online (Sandbox Code Playgroud)
第二个选项可能更好,虽然更复杂,因为您使用DISTINCT处理的中间行较少
| 归档时间: |
|
| 查看次数: |
1981 次 |
| 最近记录: |