升级到TiDB5.0后包含distinct、orderby关键字的语句报错

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:

【TiDB 版本】5.7.25-TiDB-v5.0.1

【问题描述】

从v4.0.0升级到v5.0.1后语句报错,在v4.0.0中不报错

SQL 错误 [3065] [HY000]: Expression #1 of ORDER BY clause is not in SELECT list, references column ‘test.tmp_202105201114.c_col_order’ which is not in SELECT list; this is incompatible with DISTINCT

重现脚本:

CREATE TABLE tmp_202105201114
(
c_col_distinct varchar(10),
c_col_order varchar(10)
);

SELECT DISTINCT c_col_distinct FROM tmp_202105201114 ORDER BY c_col_order;

解决方案:

SELECT DISTINCT c_col_distinct,c_col_order FROM tmp_202105201114 ORDER BY c_col_order;

1 Like

目前是有复现这个问题的。看起来确实是比较反常的。目前我们已经反馈了这个问题。有消息的话和您同步。
这个是可以跑通的。
SELECT c_col_distinct FROM tmp_202105201114 ORDER BY c_col_order;
目前还在排查 distinct 的问题。

应该是将distinct优化成group by导致的

我也是这么猜想的。
把 only_full_group_by 从 sql_mode 参数里面拿掉可以跑的通。
但我觉得也是不符合预期的。

mysql 里面,也是这个行为
mysql> SELECT DISTINCT c_col_distinct FROM tmp_202105201114 ORDER BY c_col_order;
ERROR 3065 (HY000): Expression #1 of ORDER BY clause is not in SELECT list, references column ‘test.tmp_202105201114.c_col_order’ which is not in SELECT list; this is incompatible with DISTINCT
mysql> select version();
±----------+
| version() |
±----------+
| 5.7.34 |
±----------+
1 row in set (0.01 sec)

mysql 里面也是需要 sqlmode。才可以跑通这个 sql。
那这样我是不是可以理解,这个是符合预期的。

重点来了,v5.0版本之前是不报错的,我们这都从19年开始用的,今年升级到5.0就报错了。。。

我验证了一下在 4.0.9,确实是可以查出来的。
如果按照 mysql 的标准来看,可以理解为 4.0 版本的一个 bug,在 5.0 里面修复了。
我们也反馈了这个问题,对于用户的业务系统,确实会来带不好的体验感。
谢谢老师的反馈 :)

明明是一个彩蛋,不是bug。嘻嘻~~

:sweat_smile::sweat_smile::sweat_smile:

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。