如何在中包含不匹配的行 GROUP_CONCAT
? 来,table cls_sec
包含分配给类的每个部分。
一级有2节-“a”和“b”,
二班有一节“a”
三班没有课。
在这里,节是连接表之间关系的关键,但我如何才能包括在表中没有节的类3呢 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
如果类具有节,则每个节都将与其关联的类一起显示,否则仅回显类(如果任何节未分配给此类):
所以我在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
1条答案
按热度按时间ltskdhd11#
Join
与OR .. IS NULL
条件需要替换为LEFT JOIN
.没有必要
ORDER BY
最后,当您聚合到一行时。使用
Coalesce()
函数来考虑类没有节时的情况。我补充说
Concat()
内部函数Group_concat()
,以便于理解。然而,正如建议的那样by@raymond 尼兰德,不用它我们还是可以工作的。Concat()
函数返回null
,如果要连接的任何子字符串null
. 所以,当没有区域时,我们需要移动-
进入Concat()
,以避免任何拖尾-
在字符串中。尝试: