如果添加了另一列,group_concat 返回 null

Posted

技术标签:

【中文标题】如果添加了另一列,group_concat 返回 null【英文标题】:group_concat returns null, if another column added 【发布时间】:2014-11-10 08:39:23 【问题描述】:

我有以下代码

SELECT
  GROUP_CONCAT(
    CONCAT('"id"', id, ','),
    CONCAT('"COL1"', col1, ','),
    CONCAT('"col2"', col2, ','),
    CONCAT('"col3"', col3, ','),
    CONCAT('"col4"', col4, '')
    SEPERATOR '\n')
  AS json from tableX

整个 group_concat 返回 null。如果我删除了一个 concat(随机),它会起作用。

该表包含大约 1500 万行。 我已经设置了

SET SESSION group_concat_max_len = 188446744073709551615;

知道为什么它返回 null 吗?

【问题讨论】:

【参考方案1】:

试试这个,处理任何空值,看看你的输出是否确实超过了长度阈值:

  select json, length(json) from (
  SELECT
  GROUP_CONCAT(
    CONCAT('"id"', coalesce(id, '""'), ','),
    CONCAT('"COL1"', coalesce(col1, '""'), ','),
    CONCAT('"col2"', coalesce(col2, '""'), ','),
    CONCAT('"col3"', coalesce(col3, '""'), ','),
    CONCAT('"col4"', coalesce(col4, '""'), '')
    SEPARATOR '\n')
  AS json from tableX
  ) x
  -- limit 200000

如果 group_concat 函数允许 NULL 值覆盖其他所有值(我不确定),那么您已经满足了。

更新SEPERATOR 是一个错字 - 应该是 SEPARATOR

【讨论】:

如果值为空,则添加引号 (""),否则 [12,,,] 是无效的 json @Dan:你得到长度输出了吗?您可以尝试包含limit 术语并增加直到遇到问题吗? 仍然只是返回空值。整个声明。即使我添加限制它返回 null ......仍然,如果我删除一个 CONCAT 它可以工作.. @Dan:你在使用 SEPARATOR(一个“e”)吗?我在我的数据库上试了一下,它似乎工作正常。 @davek,是的,分隔符

以上是关于如果添加了另一列,group_concat 返回 null的主要内容,如果未能解决你的问题,请参考以下文章

如果任何值为 NULL,GROUP_CONCAT 返回 NULL

使用 php 返回 GROUP_CONCAT('column x') 值

从另一列 SQL 返回正在运行的最大列

如果匹配,如何合并两个数据帧并从新列中的另一列返回数据?

如何使用 mySQL 返回另一列中每个值的最常见列值?

在行值更改后,在另一列中返回一行