Hvis vi har en unik kolonne (eller sæt af kolonner) i tabellen, så kan vi tilføje endnu et udtryk til GROUP BY
.
Udtrykket skal returnere en unik værdi for hver række, når collection_id
er nul. Ellers returnerer den en konstant.
Forudsat at vi har et unikt id
kolonne i tabellen, så kan vi gøre noget som dette:
... GROUP BY collection_id, IF(collection_id IS NULL, id, 0)
Det andet udtryk i GROUP BY
returnerer en konstant værdi 0
når collection_id
er ikke nul. Men det returnerer en unik værdi for hver række, når collection_id er null.
Bemærk at id
her er blot en reference til en kolonne, der er defineret til at være unik i tabellen. PRIMÆR NØGLEN er en god kandidat. Hvis vi ikke har et unikt indeks på en enkelt kolonne, så kan vi gentage den samme type udtryk for hver kolonne i vores unikke begrænsning, eller for ethvert sæt udtryk, der med garanti er unikke i hver række.
... GROUP BY collection_id
, IF(collection_id IS NULL, col1, '')
, IF(collection_id IS NULL, col2, NULL)
, IF(collection_id IS NULL, col3, collection_id)
Alternativt kan vi bruge et udtryk, der genererer en unik værdi:
... GROUP BY IFNULL(collection_id,UUID())