¿Cómo prevenir GROUP_CONCAT de la creación de un resultado cuando no hay datos de entrada está presente?
-
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.
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