当存在外部ORDER BY时,我是否需要内部ORDER BY?

时间:2016-05-29 13:52:02

标签: mysql sql sql-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,我可以做得更好吗?

1 个答案:

答案 0 :(得分:2)

如果查询中有var inputElement = document.getElementById("input_message"); inputElement.focus(); inputElement.addEventListener("blur", function(event){ inputElement.focus(); }); ,则需要内部order by。因此,第三个子查询根据顺序选择15行。

一般情况下,当您拥有limit时,您应该使用limit。如果您正在学习数据库,则尤其如此。你可能似乎得到了正确的答案 - 然后当它在稍后的某个时间点不起作用时会非常惊讶。仅仅因为某些东西似乎有用并不意味着它可以保证有效。

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