有外层ORDER BY还需要内层ORDER BY吗?

Do I need inner ORDER BY when there is an outer ORDER BY?

这是我的查询:

( SELECT id, table_code, seen, date_time FROM events
  WHERE author_id = ? AND seen IS NULL

) UNION
( SELECT id, table_code, seen, date_time FROM events
  WHERE author_id = ? AND seen IS NOT NULL
  LIMIT 2 

) UNION 
( SELECT id, table_code, seen, date_time FROM events
  WHERE author_id = ?
  ORDER BY (seen IS NULL) desc, date_time desc           -- inner ORDER BY
  LIMIT 15
)
ORDER BY (seen IS NULL) desc, date_time desc;            -- outer ORDER BY

如您所见,有一个外部 ORDER BY,其中一个子查询也有自己的 ORDER BY。我相信子查询中的 ORDER BY 是无用的,因为最终结果将由外部结果排序。我对吗?或者里面的 ORDER BY 对排序有什么影响?


还有我关于上面查询的第二个问题:实际上我只需要 idtable_code。我选择 seendate_time 只是为了那个外 ORDER BY,我可以做得更好吗?

当查询中有 limit 时,您需要内部 order by。所以,第三个子查询是根据 order by 选择 15 行。

一般来说,当你有 limit 时,你应该使用 order by。如果您正在学习数据库,则尤其如此。您可能看起来得到了正确的答案——然后当它在稍后的某个时间点不起作用时感到非常惊讶。仅仅因为某些东西看起来有效并不意味着它一定有效。

外部顺序只对子查询返回的所有行进行排序。