2010-09-06 16 views
17

Biorąc pod uwagę następujące zapytanie MySQL:Jak zapobiec tworzeniu GROUP_CONCAT wyniku, gdy nie ma danych wejściowych?

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

Chcę pobrać listę wszystkich „show” z bazy danych, w tym identyfikatory zawartych „klipy”.

Działa to dobrze, o ile istnieją pozycje w tabeli show. W tym przypadku załóżmy, że wszystkie tabele są całkowicie puste.

GROUP_CONCAT zwróci NULL i tym samym wymusi na wynikach wiersz (który zawiera tylko wartości NULL).

Moja aplikacja będzie wtedy myśleć, że jeden program/wynik istnieje. Ale ten wynik będzie nieważny. Można to oczywiście sprawdzić, ale uważam, że to powinno (i powinno) być już zablokowane w zapytaniu.

Odpowiedz

33

Należy po prostu dodać GROUP BY na końcu.

przypadek testowy:

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) 
8

Dodaj grupę przez show. id, wówczas wynik będzie poprawny dla pustych tabel:

utwórz pustą tabelę (id int, nazwa varchar (20));

select id, group_concat(name) from emptyt 

wynik:

NULL, NULL 

zapytania z grupy przez

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

wyniku:

pusty zbiór danych

+0

Dzięki. Będę nazywać odpowiedź Daniela jako odpowiedź, ponieważ wydawał się być drugi szybszy. –

Powiązane problemy