Если у нас есть уникальный столбец (или набор столбцов) в таблице, мы можем добавить еще одно выражение в GROUP BY
.
Выражение должно возвращать уникальное значение для каждой строки, когда collection_id
равно нулю. В противном случае возвращается константа.
Предполагая, что у нас есть уникальный столбец id
в таблице, мы можем сделать что-то вроде этого:
... GROUP BY collection_id, IF(collection_id IS NULL, id, 0)
Это второе выражение в GROUP BY
возвращает постоянное значение 0
, когда collection_id
не равно нулю. Но он возвращает уникальное значение для каждой строки, когда collection_id имеет значение null.
Обратите внимание, что 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())
person
spencer7593
schedule
13.03.2014
where collection_id is not null
, а вторым, разгруппированным, ограниченнымwhere collection_id is null
- person barry-johnson   schedule 13.03.2014started_date
в вашем запросе выше. Я понимаю, что не хочу публиковать весь ваш запрос, но, по крайней мере, что-то, что на самом деле передает то, что вы хотите сделать, экономит всем время. - person barry-johnson   schedule 13.03.2014UNION ALL
, чтобы избежать накладных расходов, связанных с сортировкой, необходимой для удаления дубликатов. Обратите внимание, что можно использоватьORDER BY
с запросомUNION
илиUNION ALL
, но он может ссылаться только на столбцы/выражения в списке SELECT запроса, и эти ссылки должны быть по имени столбца или по порядковому номеру в результирующем наборе. - person spencer7593   schedule 13.03.2014