小编典典

SQL SELECT获取前N个正整数

mysql

我需要获取一个包含前N个正整数的结果集。是否可以仅使用标准SQL SELECT语句来获取它们(不提供任何计数表)?

如果不可能,是否有任何特定的MySQL方法来实现?


阅读 617

收藏
2020-05-17

共1个答案

小编典典

似乎您想要的是一个dummy rowset

在中MySQL,没有表是不可能的。

大多数主要系统都提供了一种实现方法:

  • Oracle

    SELECT  level
    

    FROM dual
    CONNECT BY
    level <= 10

  • SQL Server

    WITH    q AS
        (
        SELECT  1 AS num
        UNION ALL
        SELECT  num + 1
        FROM    q
        WHERE   num < 10
        )
    

    SELECT * FROM q

  • PostgreSQL

    SELECT  num
    

    FROM generate_series(1, 10) num

MySQL 缺少这样的东西,这是一个严重的缺点。

我写了一个简单的脚本来为博客文章中的示例表生成测试数据,也许会有用:

CREATE TABLE filler (
        id INT NOT NULL PRIMARY KEY AUTO_INCREMENT
) ENGINE=Memory;

CREATE PROCEDURE prc_filler(cnt INT)
BEGIN
        DECLARE _cnt INT;
        SET _cnt = 1;
        WHILE _cnt <= cnt DO
                INSERT
                INTO    filler
                SELECT  _cnt;
                SET _cnt = _cnt + 1;
        END WHILE;
END
$$

您调用该过程,表格将被数字填充。

您可以在会话期间重用它。

2020-05-17