Om vi har en unik kolumn (eller uppsättning kolumner) i tabellen kan vi lägga till ytterligare ett uttryck till GROUP BY
.
Uttrycket måste returnera ett unikt värde för varje rad när collection_id
är inget. Annars returnerar den en konstant.
Förutsatt att vi har ett unikt id
kolumn i tabellen, då kan vi göra något så här:
... GROUP BY collection_id, IF(collection_id IS NULL, id, 0)
Det andra uttrycket i GROUP BY
returnerar ett konstant värde 0
när collection_id
är inte null. Men det returnerar ett unikt värde för varje rad när collection_id är null.
Observera att id
här är bara en referens till en kolumn som är definierad som unik i tabellen. PRIMÄRNYCKELN är en bra kandidat. Om vi inte har ett unikt index på en enda kolumn kan vi upprepa samma typ av uttryck för varje kolumn i vår unika begränsning, eller för vilken uppsättning uttryck som helst som garanterat är unika på varje rad.
... 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 använda ett uttryck som genererar ett unikt värde:
... GROUP BY IFNULL(collection_id,UUID())