Ако имаме уникална колона (или набор от колони) в таблицата, тогава можем да добавим друг израз към GROUP BY
.
Изразът трябва да върне уникална стойност за всеки ред, когато collection_id
е нула. В противен случай връща константа.
Ако приемем, че имаме уникален id
колона в таблицата, тогава можем да направим нещо подобно:
... GROUP BY collection_id, IF(collection_id IS NULL, id, 0)
Този втори израз в GROUP BY
връща константна стойност 0
когато collection_id
не е нула. Но връща уникална стойност за всеки ред, когато collection_id е нулев.
Обърнете внимание, че id
тук е само препратка към колона, която е дефинирана като уникална в таблицата. ПЪРВИЧНИЯТ КЛЮЧ е добър кандидат. Ако нямаме уникален индекс за една колона, тогава можем да повторим същия тип израз за всяка колона в нашето уникално ограничение или за всеки набор от изрази, който гарантирано е уникален за всеки ред.
... 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)
Като алтернатива можем да използваме израз, генериращ уникална стойност:
... GROUP BY IFNULL(collection_id,UUID())