SELECT DISTINCT AAA
FROM (SELECT 'aaa' AAA ,1 NNN FROM DUAL
UNION
SELECT 'bbb' AAA ,2 NNN FROM DUAL)
ORDER BY NNN
SELECT *
FROM (SELECT DISTINCT AAA
FROM (SELECT 'aaa' AAA ,1 NNN FROM DUAL
UNION
SELECT 'bbb' AAA ,2 NNN FROM DUAL)
ORDER BY NNN)
ORDER BY AAA
百度之后,我能理解为什么代码1报错,但是不太明白代码2为什么不报错;
对于代码2不报错的原因,我只能先粗浅理解为:内层order by 的字段只要是表中存在的字段,sql编译的时候就能通过编译,而实际执行时,当外层sql语句已经有order by后,就不会再去执行子查询的order by了,或者子查询的order by语句直接就会被数据库的优化器过滤、忽略掉