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

Pra*_*ady 10 sql subquery sql-order-by

有没有理由为什么或为什么不在子查询中执行'order by'?

sle*_*ske 12

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

子查询会在某些外部查询(否则将是毫无意义的)来使用,并且外部查询将不得不这样做反正订货,所以没有点订购的子查询.

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

它当然可以在某些特定的RDBMS中产生差异,因为它的实现,但这将是特定于实现的,而不是你应该依赖的东西.

编辑:当然,如果在子查询中使用TOP或LIMIT,需要使用ORDER.但是那不是标准的SQL ......


Qua*_*noi 11

如果子查询使用某种LIMIT/ ,则应该使用它TOP.

SQL Server除非子查询包含TOPFOR XML子句,否则不允许它:

-- 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
Run Code Online (Sandbox Code Playgroud)