没有输入数据时,如何防止 GROUP_CONCAT 创建结果?

Posted

技术标签:

【中文标题】没有输入数据时,如何防止 GROUP_CONCAT 创建结果?【英文标题】:How to prevent GROUP_CONCAT from creating a result when no input data is present? 【发布时间】:2011-04-08 19:56:06 【问题描述】:

给定以下 mysql 查询:

SELECT
  `show`.`id`
  , GROUP_CONCAT( `showClips`.`clipId` ORDER BY `position` ASC ) AS 'playlist'
FROM
  `show`
  INNER JOIN
    `showClips`
      ON
        ( `show`.`id` = `showClips`.`showId` )
;

我想从数据库中检索所有“节目”的列表,包括包含的“剪辑”的 ID。

只要show 表中有条目,它就可以正常工作。对于这个问题,我们假设所有表都是空的。

GROUP_CONCAT 将返回 NULL 并因此强制在结果中输入一行(其中仅包含 NULL 值)。

然后我的应用程序会认为存在一个节目/结果。但是那个结果是无效的。这当然可以检查,但我觉得这可以(并且应该)在查询中被阻止。

【问题讨论】:

【参考方案1】:

您应该在末尾添加一个GROUP BY

测试用例:

CREATE TABLE `show` (id int);
CREATE TABLE `showClips` (clipId int, showId int, position int);

SELECT 
   `show`.`id`,
   GROUP_CONCAT( `showClips`.`clipId` ORDER BY `position` ASC ) AS 'playlist'
FROM  `show`
INNER JOIN `showClips` ON ( `show`.`id` = `showClips`.`showId` )
GROUP BY `show`.`id`;

Empty set (0.00 sec)

【讨论】:

值得一提的是,如果您想避免从空集创建结果但不希望结果按任何特定列分组,您可以使用GROUP BY NULL【参考方案2】:

show.id添加分组,则空表的结果将正确:

create table emptyt(id int, name varchar(20));

   select id, group_concat(name) from emptyt

结果:

 NULL, NULL

分组查询

 select id, group_concat(name) from emptyt
 group by Id

结果:

空数据集

【讨论】:

谢谢。我会将丹尼尔的回复标记为答案,因为他似乎快了一秒。

以上是关于没有输入数据时,如何防止 GROUP_CONCAT 创建结果?的主要内容,如果未能解决你的问题,请参考以下文章

当没有匹配的记录时,如何将与另一个表连接的 group_concat 列更改为空字符串而不是 null?

MUI 自动完成:如何防止在焦点上打开,而不是在输入更改时打开?

刷新时如何防止重复条目?

MySQL如何防止字符串截断[重复]

如何在数据表中将 group_concat() 列显示为一列?

如何防止 YAML 在没有新行的情况下转储长行