给定以下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值)。

然后,我的应用程序将认为存在一个显示/结果。但是那个结果将是无效的。当然可以对此进行检查,但是我觉得可以(并且应该)在查询中已经避免这种情况。

最佳答案

您只需在末尾添加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)

10-08 04:41