SQL SELECT to get the first N positive integers

前端 未结 10 1356

I need to get a result set containing the first N positive integers. Is it possible to use only standard SQL SELECT statement to get them (without any count table provided)?

10条回答
  •  攒了一身酷
    2020-11-30 13:06

    Seems that what you want is a dummy rowset.

    In MySQL, it's impossible without having a table.

    Most major systems provide a way to do it:

    • In Oracle:

      SELECT  level
      FROM    dual
      CONNECT BY
              level <= 10
      
    • In SQL Server:

      WITH    q AS
              (
              SELECT  1 AS num
              UNION ALL
              SELECT  num + 1
              FROM    q
              WHERE   num < 10
              )
      SELECT  *
      FROM    q
      
    • In PostgreSQL:

      SELECT  num
      FROM    generate_series(1, 10) num
      

    MySQL lacks something like this and this is a serious drawback.

    I wrote a simple script to generate test data for the sample tables in my blog posts, maybe it will be of use:

    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
    $$
    

    You call the procedure and the table gets filled with the numbers.

    You can reuse it during the duration of the session.

提交回复
热议问题