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

Der*_*ler 20 mysql group-concat

给出以下MySQL查询:

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

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

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

GROUP_CONCAT将返回NULL并因此强制一行进入结果(仅包含NULL值).

然后我的应用程序会认为存在一个显示/结果.但结果将无效.这当然可以检查,但我觉得这可以(并且应该)在查询中已经被阻止了.

Dan*_*llo 40

你应该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)
Run Code Online (Sandbox Code Playgroud)

  • 值得一提的是,如果您想避免从空集中创建结果,但又不希望结果按任何特定列分组,则可以执行“GROUP BY NULL” (3认同)

Mic*_*sov 10

添加组show.id,那么空表的结果是正确的:

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

   select id, group_concat(name) from emptyt
Run Code Online (Sandbox Code Playgroud)

结果:

 NULL, NULL
Run Code Online (Sandbox Code Playgroud)

用group by查询

 select id, group_concat(name) from emptyt
 group by Id
Run Code Online (Sandbox Code Playgroud)

结果:

空数据集