0

我有一个结构如下的 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 中包含 order by 字段:

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

问题是这样做查询现在不再选择国家== NULL的项目。

除了删除 distinct 或更改sql-mode?

谢谢

4

1 回答 1

0

https://dev.mysql.com/doc/refman/8.0/en/group-by-handling.html说:

考虑具有三列 c1、c2 和 c3 的表 t 的情况,其中包含以下行:

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 操作。

文档继续:

为防止出现此问题,如果任何 ORDER BY 表达式至少不满足以下条件之一,则具有 DISTINCT 和 ORDER BY 的查询将被拒绝为无效:

  • 表达式等于选择列表中的一

  • 表达式引用并属于查询的选定表的所有列都是选择列表的元素

于 2020-06-17T21:46:36.407 回答