【问题标题】:group_concat returns null, if another column added如果添加了另一列,group_concat 返回 null
【发布时间】: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 吗?

【问题讨论】:

    标签: mysql bigdata


    【解决方案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,是的,分隔符
    猜你喜欢
    • 2012-08-19
    • 1970-01-01
    • 2019-08-29
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    • 2011-05-11
    • 1970-01-01
    相关资源
    最近更新 更多