有什么理由或者为什么不应该在子查询中执行“order by”吗?
发布于 2010-01-20 22:17:34
是的:不应该这样做,因为它在概念上没有意义。
子查询将在某些外部查询中使用(否则将毫无意义),且外部查询无论如何都必须进行排序,因此对子查询进行排序没有意义。
这是因为SQL中的查询结果没有特定的顺序,除非您使用显式顺序。因此,即使在子查询中使用了ORDER,也不能保证这会影响外部查询结果的顺序;因此这是没有意义的。
当然,由于其实现,它可能会对某些特定RDBMS产生影响,但这将是特定于实现的,而不是您应该依赖的东西。
Edit:当然,如果在子查询中使用TOP或LIMIT,则需要使用ORDER。但这不是标准的SQL ...
发布于 2010-01-20 22:16:53
如果子查询使用某种类型的LIMIT
/ TOP
,则应该使用它。
除非子查询也包含TOP
或FOR XML
子句,否则SQL Server
不允许这样做:
-- Fails
WITH q(id) AS
(
SELECT 1
UNION ALL
SELECT 2
)
SELECT *
FROM (
SELECT *
FROM q
ORDER BY
id DESC
) q2
-- Succeeds
WITH q(id) AS
(
SELECT 1
UNION ALL
SELECT 2
)
SELECT *
FROM (
SELECT TOP 1 *
FROM q
ORDER BY
id DESC
) q2
-- Succeeds, but ORDER BY is ignored
WITH q(id) AS
(
SELECT 1
UNION ALL
SELECT 2
)
SELECT *
FROM (
SELECT TOP 100 PERCENT *
FROM q
ORDER BY
id DESC
) q2
发布于 2010-01-20 22:17:55
除非使用top,否则它没有什么用处,因为无论如何都要在外部查询中进行排序
https://stackoverflow.com/questions/2101908
复制相似问题