Подтвердить что ты не робот

Как запретить 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` )
;

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

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

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

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

4b9b3361

Ответ 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)

Ответ 2

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

create table emptyt (id int, имя varchar (20));

   select id, group_concat(name) from emptyt

результат:

 NULL, NULL

запрос с группой

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

результат:

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