Как предотвратить создание GROUP_CONCAT результата, когда нет входных данных? - PullRequest
19 голосов
/ 06 сентября 2010

Учитывая следующий запрос MySQL:

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

Я хочу получить список всех "шоу" из базы данных, включая идентификаторы содержащихся "клипов".

Это работает нормально, если в таблице show есть записи.Для этой проблемы предположим, что все таблицы полностью пусты.

GROUP_CONCAT вернет NULL и, таким образом, вынудит строку в результат (который содержит только NULL значения).

Мое приложение будет думать, что существует одно шоу / результат.Но этот результат будет недействительным.Конечно, это можно проверить, но я чувствую, что это можно (и нужно) предотвратить в запросе.

Ответы [ 2 ]

39 голосов
/ 06 сентября 2010

Вы должны просто добавить 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 голосов
/ 06 сентября 2010

Добавить группу по show. id, тогда результат будет пустым для таблиц:

создать таблицу 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

результат:

пустой набор данных

...