【发布时间】:2018-11-02 13:33:39
【问题描述】:
如何在 GROUP_CONCAT 中包含不匹配的行?在这里,表cls_sec 包含分配给类的每个部分。
One 类有 2 section - 'A' 和 'B ',
Two 类有 1 个部分 'A'
三类有No部分。
这里的部分是连接表之间关系的关键,但我怎样才能包含在GROUP_CONCAT 结果中没有部分的第三类。
表cls - 类列表
id | ttl
===========
1 | One
2 | Two
3 | Three
表格sec - 部分列表
id | ttl
===========
1 | A
2 | B
表cls_sec - 分配给类的每个部分的列表
id | c_id| s_id
=====================
1 | 1 | 1
2 | 1 | 2
3 | 2 | 1
根据cls_sec中的行,我的预期如下,
1.One-B,1.One-A,2.Two-A,3.Three
如果类有部分,每个部分都将显示其关联的类,else 仅回显类(如果任何部分尚未分配给该类):
那么我在 mysql 中所做的选择是匹配行还是空行
MySQL 代码
SELECT
GROUP_CONCAT(DISTINCT cls.id,'.',cls.en_ttl, '-', sec.en_ttl
ORDER BY cls.id) AS cls
FROM
cls
LEFT JOIN
cls_sec ON cls_sec.c_id = cls.id
JOIN
sec ON sec.id = cls_sec.s_id OR cls_sec.s_id is NULL
ORDER BY cls.id DESC
但我得到了
1.One-B,1.One-A,2.Two-A,3.Three-B,3.Three-A
【问题讨论】:
-
当您将所有内容汇总到一行时,不需要在末尾使用
order by。 -
你能提供
Create Table的声明吗?或 SQL 小提琴 / DB 小提琴。这有助于加快测试速度。
标签: mysql group-concat