Как достать все поля, но где один столбец уникальный?
Есть запрос, который возвращает

Мне нужно достать все столбцы, но только уникальных записей (id 2,3,5,10,11,12). То есть те, где типы (поле type) не повторяются. Достать только уникальные столбцы можно через Distinct, но он возвращает не все столбцы, а мне нужны все. Также в сети говорят, что можно использовать SELECT * WHERE ..... GROUP BY type, но у меня вылетает ошибка:
#1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'roomtest.rooms.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by.
В сети советуют убрать в sql_mode only_full_group_by, но проблема в том, что в моей mysql 8 и так нет only_full_group_by...
Подскажите, каким образом можно достать все столбцы уникальных записей?
Запрос выглядит вот таким образом:
SELECT * FROM rooms WHERE id NOT IN (SELECT room_id FROM `bron` WHERE
'2022-03-04 13:00:00' <= end AND '2022-03-04 13:00:00' >= start OR
'2022-03-06 11:00:00' <= end AND '2022-03-06 11:00:00' >= start)
Ответы (1 шт):
Это кажется логичным. Если для уникальных строк id однозначно сопоставим, то что брать в качестве id для группы? Т.е. MySQL хочет, чтобы мы задали агрегатные функции для полей, которые не включаем в группировку.
SELECT type, price FROM rooms GROUP BY type, price
Такой запрос будет работать, вывод будет без id. Если вам все же требуются id, можно собрать их агрегатной функцией GROUP_CONCAT:
SELECT GROUP_CONCAT(id) as ids, type, price FROM rooms GROUP BY type, price
Измените свои запросы с учетом этих замечаний и всё заработает.
