Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Составление SQL-запросов > Ошибка при использовании DISTINCT, ORDER BY и CASE |
Автор: polin11 20.6.2018, 14:01 | ||||
Есть запрос, он выполняется без ошибок, но есть дублирующие записи
При попытке использовать DISTINCT, а именно
возникает проблема: в конструкции SELECT DISTINCT выражения ORDER BY должны быть в списке выборки не могу сообразить, как избавиться от дублей "Field2" |
Автор: Snowy 20.6.2018, 14:47 | ||||
По данной логике - никак. Допустим имеем записи: AAA BBB AAA AAA BBB AAA Как в таком случае сортировать AAA, если он подпадает и туда и туда? Тут нужно корректнее определиться, как сортировать. Например, если хоть одна из AAA равна своему "Field3"
или, оставлять оба варианта, если если есть и такой и такой вариант:
|
Автор: polin11 21.6.2018, 17:51 | ||||
Работает такой вариант
У меня еще один вопрос, есть аналогичный запрос с LIMIT
поправьте меня, если я не прав, при выполнении запроса планировщик пробежит ВСЕ записи, выполнит поиск по условию "Field1" LIKE 'val%', затем отсортирует по Ord и выдаст первые 20 записей, то есть по времени и ресурсам будет аналогично, этому же запросу, но без LIMIT 20 |
Автор: Snowy 21.6.2018, 19:08 | ||
Не работает. Если одновременно будут записи с "Field2" = "Field3" и "Field2" <> "Field3", то запись будет в двух экземплярах, как в моём втором варианте. case здесь не нужен. Просто
По дистинкту - да. Используй group by. Distinct - кака. |
Автор: _zorn_ 22.6.2018, 19:02 |
На самом деле (акелла уверял) "group by" (ну и destinct соответсвенно) не детерменированны. Т.е. результат зависит от левой пятки движка мускуля. (Мы же про мускуль сейчас говорим ?) А вообще нечего делать из мускуля оракл ) Что мешает в приложении нужные сравнения сделать ? |