有外层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
对排序有什么影响?
还有我关于上面查询的第二个问题:实际上我只需要 id
和 table_code
。我选择 seen
和 date_time
只是为了那个外 ORDER BY
,我可以做得更好吗?
当查询中有 limit
时,您需要内部 order by
。所以,第三个子查询是根据 order by 选择 15 行。
一般来说,当你有 limit
时,你应该使用 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
对排序有什么影响?
还有我关于上面查询的第二个问题:实际上我只需要 id
和 table_code
。我选择 seen
和 date_time
只是为了那个外 ORDER BY
,我可以做得更好吗?
当查询中有 limit
时,您需要内部 order by
。所以,第三个子查询是根据 order by 选择 15 行。
一般来说,当你有 limit
时,你应该使用 order by
。如果您正在学习数据库,则尤其如此。您可能看起来得到了正确的答案——然后当它在稍后的某个时间点不起作用时感到非常惊讶。仅仅因为某些东西看起来有效并不意味着它一定有效。
外部顺序只对子查询返回的所有行进行排序。