作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的查询:
( 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
对排序有什么影响?
还有关于上面查询的第二个问题:实际上我只需要 id
和 table_code
。我已经为外部 ORDER BY
选择了 seen
和 date_time
,我可以做得更好吗?
最佳答案
当查询中有 limit
时,您需要内部 order by
。因此,第三个子查询是根据 order by 选择 15 行。
一般来说,当你有limit
时,你应该使用order by
。如果您正在学习数据库,则尤其如此。您可能看起来得到了正确的答案——然后当它在稍后的某个时间点不起作用时感到非常惊讶。仅仅因为某些东西看起来有效并不意味着它一定有效。
外部 order by 仅对子查询返回的所有行进行排序。
关于mysql - 有外层ORDER BY还需要内层ORDER BY吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37510700/
我是一名优秀的程序员,十分优秀!