JPA, отдельный, порядок, нулевые значения и режим ONLY_FULL_GROUP_BY sql - PullRequest
0 голосов
/ 17 июня 2020

У меня есть запрос JPA со следующей структурой:

SELECT distinct item
FROM ... 
WHERE ...
ORDER BY ...

Я использую MySQL 8 и потому что я использую предложение ORDER BY для сортировки по свойствам элемента, названию области, названию страны и название бренда) Я получал эту ошибку:

Expression #1 of ORDER BY clause is not in SELECT list, references column 'db.country4_.name' which is not in SELECT list; this is incompatible with DISTINCT

Мне пришлось включить порядок по полям в SELECT:

SELECT distinct item, item.area.name, item.country.name, item.brand.name 
FROM ... 
WHERE ...
ORDER BY ...

Проблема в том, что теперь запрос не выполняет t больше не выбирать элементы, для которых country == NULL.

Помимо удаления отдельного или изменения sql-mode?

Спасибо

1 Ответ

0 голосов
/ 18 июня 2020

https://dev.mysql.com/doc/refman/8.0/en/group-by-handling.html говорит:

Рассмотрим случай таблицы t с тремя столбцами c1, c2 и c3, которая содержит эти строки:

c1 c2 c3
1  2  A
3  4  B
1  2  C

Предположим, что мы выполняем следующий запрос, ожидая, что результаты будут упорядочены по c3:

SELECT DISTINCT c1, c2 FROM t ORDER BY c3;

Должен ли результат быть:

c1 c2
1  2
3  4

Или должен быть :

c1 c2
3  4
1  2

Если заказано c3, это должен быть первый пример. Но DISTINCT реализуется путем копирования строк результатов во временную таблицу, сортировки этой таблицы и удаления дубликатов. Если c3 не является частью списка выбора, он не включается во временную таблицу. Но если c3 включен как часть списка выбора, то есть во временной таблице, это влияет на операцию DISTINCT.

Документация продолжается:

To Чтобы предотвратить эту проблему, запрос, содержащий DISTINCT и ORDER BY, отклоняется как недопустимый, если какое-либо выражение ORDER BY не удовлетворяет хотя бы одному из следующих условий:

  • Выражение равно единице в список выбора

  • Все столбцы, на которые ссылается выражение и принадлежащие выбранным таблицам запроса, являются элементами списка выбора

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...