Как предотвратить GROUP_CONCAT от создания результата, если нет входных данных?

17

Учитывая следующий запрос 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 ).

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

    
задан Oliver Salzburg 06.09.2010 в 17:24
источник

2 ответа

35

Вы должны просто добавить 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)
    
ответ дан Daniel Vassallo 06.09.2010 в 17:30
источник
8

Добавить группу 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

результат:

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

    
ответ дан Michael Pakhantsov 06.09.2010 в 17:30
источник
  • Спасибо. Я отвечу на ответ Дэниела как на ответ, поскольку он, казалось, был вторым быстрее. –  Oliver Salzburg 06.09.2010 в 17:42