sql-server - "ORDER BY (SELECT NULL)"是什么意思?

标签 sql-server select sql-order-by

以下 SQL 来自 Itzik Ben-Gan,用于生成数字表。 order by (select null) 部分是什么意思?谢谢。

DECLARE @number_of_numbers INT;
SELECT @number_of_numbers = 100000;

WITH    a AS ( SELECT   1 AS i
               UNION ALL
               SELECT   1
             ),
        b AS ( SELECT   1 AS i
               FROM     a AS x ,
                        a AS y
             ),
        c AS ( SELECT   1 AS i
               FROM     b AS x ,
                        b AS y
             ),
        d AS ( SELECT   1 AS i
               FROM     c AS x ,
                        c AS y
             ),
        e AS ( SELECT   1 AS i
               FROM     d AS x ,
                        d AS y
             ),
        f AS ( SELECT   1 AS i
               FROM     e AS x ,
                        e AS y
             ),
        numbers
          AS ( SELECT TOP ( @number_of_numbers )
                        ROW_NUMBER() OVER ( ORDER BY ( SELECT   NULL
                                                     ) ) AS number
               FROM     f
             )
    SELECT  *
    FROM    numbers;

谢谢!

最佳答案

ROW_NUMBER在语法上需要 ORDER BY 子句。没有它你就无法使用它。 SELECT NULL 是一种在不强制执行任何特定顺序的情况下关闭错误的技巧。在这种情况下,我们不需要强制执行任何顺序,因此最快的选择是使用 SELECT NULL

优化器识破了这个技巧,因此它没有运行时成本(这个说法很容易通过查看执行计划来验证)。

关于sql-server - "ORDER BY (SELECT NULL)"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10066819/

相关文章:

mysql - 如果给定条件未计算为 True,则在Where子句中查询回退

MySQL SELECT 与条件 NULL 列

JAVA mysql更新两个表?

mysql - 慢内连接顺序查询

mysql - 这个数据库是3NF吗?

SQL - 定义一个列并在同一个查询中使用它

SQL - OR 条件的顺序重要吗?

sql - 如何对包含星号的 PostgreSQL 中的 VARCHAR 列进行排序

php - 连接 MySQL 信息和 2 个表

sql - 创建用户动态名称并分配角色