MySQL:如何使用GROUP_CONCAT分组时拼接Null值?
解决GROUP_CONCAT中显示NULL值的问题
这个问题我之前也碰到过——MySQL的GROUP_CONCAT()函数默认会自动忽略NULL值,所以那些原本为NULL的字段值就不会出现在最终的拼接结果里。要让它显示成字符串形式的NULL,只需要提前把NULL值转换成字符串'NULL'再进行拼接即可。
修改后的SQL语句
SELECT sr.aID, GROUP_CONCAT(p.GENDER SEPARATOR ', ') as Gender, GROUP_CONCAT(IFNULL(sr.FANS, 'NULL') SEPARATOR ', ') as FA FROM RELATION sr JOIN Person p ON sr.bID = p.ID WHERE RELATION_TYPE = 'FATHER' GROUP BY sr.aID;
关键说明
- 核心改动是用
IFNULL(sr.FANS, 'NULL')替换原本的sr.FANS:IFNULL()函数会检查sr.FANS的值,如果是NULL,就返回字符串'NULL',否则返回字段本身的值。这样GROUP_CONCAT()就会把这个字符串'NULL'包含进拼接结果里,而不是直接忽略。 - 如果你习惯用
COALESCE()函数,也可以写成COALESCE(sr.FANS, 'NULL'),效果是一样的——COALESCE()会返回参数列表里第一个非NULL的值,这里就是把NULL替换成'NULL'。
验证结果
修改后执行查询,你会得到期望的输出:
1 | MALE, FEMALE | YES, NO 2 | FEMALE, MALE | NO, YES 3 | FEMALE, MALE | YES, NULL 4 | FEMALE, MALE | NULL, NO
另外小提醒一下:建议用显式的JOIN语法代替原来的隐式连接(逗号分隔表),这样SQL的可读性和维护性会更好~
内容的提问来源于stack exchange,提问作者fatherazrael
相关产品推荐
相关产品推荐

