¿Cómo prevenir GROUP_CONCAT de la creación de un resultado cuando no hay datos de entrada está presente?

StackOverflow https://stackoverflow.com/questions/3652580

  •  01-10-2019
  •  | 
  •  

Pregunta

Dada la siguiente consulta MySQL:

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

Quiero recuperar una lista de todos los "shows" de la base de datos, incluidos los identificadores de "clips" contenidas.

Esto funciona bien, siempre y cuando existen entradas en la tabla show. Para este problema, vamos a asumir todas las mesas están vacías por completo.

GROUP_CONCAT volverá NULL y obligando así a una fila en el resultado (que contiene sólo valores NULL).

Mi solicitud a continuación, va a pensar que existe un show / resultado. Pero ese resultado no será válida. Esto puede por supuesto ser verificada, pero siento que esto podría (y debería) ser evitado en la consulta ya.

¿Fue útil?

Solución

Simplemente debe agregar un GROUP BY al final.

caso de prueba:

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)

Otros consejos

Añadir grupo por show.id, a continuación, resultado será correcto para mesas vacías:

crear emptyt mesa (int id, nombre varchar (20));

   select id, group_concat(name) from emptyt

resultado:

 NULL, NULL

consulta con el grupo de

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

resultado:

conjunto de datos vacío

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top