MySQL GROUP_CONCAT 与 Nulls

Posted

技术标签:

【中文标题】MySQL GROUP_CONCAT 与 Nulls【英文标题】:MySQL GROUP_CONCAT with Nulls 【发布时间】:2012-05-07 08:08:40 【问题描述】:

是否可以让 mysql 的 Group_Concat 函数包含空值?

考虑以下来自我的源表的示例:

userId, questionId, selectionId
7, 3, NULL
7, 4, 1
7, 5, 2

当我使用 GROUP_CONCAT 查询选择表时,我得到以下信息:

7, 4=1,5=2

我想得到以下内容:

7, 3=NULL,4=1,5=2

作为参考,我的查询如下所示:

Select userId, GROUP_CONCAT(CONCAT(questionId, '=', selectionId))
From selection
Group by userId;

我也尝试像这样添加一个 IFNULL:

Select userId, GROUP_CONCAT(IFNULL(CONCAT(questionId, '=', selectionId), 'NULL'))
From selection
Group by userId;

但这产生了以下结果:

7, NULL,4=1,5=2

注意 - 我忘记包括另一个复杂性。 selectionId 是另一个表的外键。我对 selection_text 表使用左外连接。我的真实查询包括该表中的字段(这些字段解析为 NULL,因为 selectionId 为空)。

【问题讨论】:

产生了应有的效果,在 selectionId 上尝试 IFNULL,而不是在 CONCAT 上。 但一般来说-避免使用Group Concat! 【参考方案1】:

你应该只是IFNULL可以是NULL的列;

SELECT userId, GROUP_CONCAT(CONCAT(questionId, '=', 
                 IFNULL(selectionId, 'NULL')))
FROM selection
GROUP BY userId;

演示here.

【讨论】:

刚刚遇到这个问题。很棒的答案。我现在学到了今天的新东西:)【参考方案2】:

您应该直接在selectionId 值上使用IFNULLCOALESCE

SELECT
  userId,
  GROUP_CONCAT(CONCAT(questionId, '=', COALESCE(selectionId, 'NULL')))
FROM selection
GROUP BY userId;

【讨论】:

以上是关于MySQL GROUP_CONCAT 与 Nulls的主要内容,如果未能解决你的问题,请参考以下文章

实际注册 NULL 的 MySQL GROUP_CONCAT?

MYSQL GROUP_CONCAT CONCAT_WS 并处理 NULL 值

mysql存储过程group_concat为游标中的选择返回null

MySQL的GROUP_CONCAT函数

MySQL的concat以及group_concat的用法

MySQL的group_concat聚集函数到HGDB的迁移