# 问题
Unknown error 3065
# 推断
sql 语句,select distinct 与 order by 一起用时,order by 字段必须在 select 中
# SQL-99 语法
SQL-99 中,在 select 中使用 distinct 关键字后,在 order by 中出现的字段名称不能超过 select 子句的范围
# 原因
- mysql 中 distinct 的执行顺序高于 order by
- distinct 执行时会对查询的记录进行去重,产生一张虚拟的临时表
- order by 执行时对查询的虚拟临时表进行排序,产生新的虚拟临时表
# 结论
综合来看,如果 order by 的字段不在 select 中,执行 sql 语句时首先执行 distinct,之后产生的虚拟临时表中没有 order by 的字段,所以再执行 order by 时会报错