Как запретить 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
).
Мое приложение затем подумает, что существует один результат/результат. Но этот результат будет недействительным. Конечно, это можно проверить, но мне кажется, что это могло (и должно) быть предотвращено в запросе уже.
Ответы
Ответ 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
результат:
пустой набор данных