首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >子查询中是否允许order by子句

子查询中是否允许order by子句
EN

Stack Overflow用户
提问于 2010-01-20 22:15:07
回答 9查看 43.7K关注 0票数 10

有什么理由或者为什么不应该在子查询中执行“order by”吗?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2010-01-20 22:17:34

是的:不应该这样做,因为它在概念上没有意义。

子查询将在某些外部查询中使用(否则将毫无意义),且外部查询无论如何都必须进行排序,因此对子查询进行排序没有意义。

这是因为SQL中的查询结果没有特定的顺序,除非您使用显式顺序。因此,即使在子查询中使用了ORDER,也不能保证这会影响外部查询结果的顺序;因此这是没有意义的。

当然,由于其实现,它可能会对某些特定RDBMS产生影响,但这将是特定于实现的,而不是您应该依赖的东西。

Edit:当然,如果在子查询中使用TOP或LIMIT,则需要使用ORDER。但这不是标准的SQL ...

票数 13
EN

Stack Overflow用户

发布于 2010-01-20 22:16:53

如果子查询使用某种类型的LIMIT / TOP,则应该使用它。

除非子查询也包含TOPFOR XML子句,否则SQL Server不允许这样做:

代码语言:javascript
运行
复制
-- 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
票数 11
EN

Stack Overflow用户

发布于 2010-01-20 22:17:55

除非使用top,否则它没有什么用处,因为无论如何都要在外部查询中进行排序

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2101908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档