mysql distinct和order by 一起用时,order by的字段必须在select中

mysql中distinct和order by 一起用时,order by的字段必须在select中

mysql 5.7.14

SELECT DISTINCT evt_tim FROM evt_etl ORDER BY evt_id ASC;

执行报错Unknown error 3065。

因为找不到3065错误的详细信息,因此做了一下测试:

- 1.SELECT DISTINCT evt_id FROM evt_etl ORDER BY evt_id ASC;

- 2.SELECT DISTINCT evt_tim,evt_id FROM evt_etl ORDER BY evt_id ASC;

- 3.SELECT evt_tim FROM evt_etl ORDER BY evt_id ASC;

1,2,3 这三条语句均执行正确。

mysql distinct和order by 一起用时,order by的字段必须在select中。

网上查了一下资料,原因总结如下:

  • 首先,在mysql中distinct 的执行顺序高于order by。
  • 第二,distinct执行时会对查询的记录进行去重,产生一张虚拟的临时表;
  • 第三,order by执行时对查询的虚拟临时表进行排序,产生新的虚拟临时表。

综合来看,如果order by的字段不在select中,执行sql语句时首先执行distinct,之后产生的虚拟临时表中没有order by的字段,所以再执行order by时会报错。

你可能感兴趣的:(mysql,mysql)