sql >> Database >  >> RDS >> Mysql

SQL SELECT om de eerste N positieve gehele getallen te krijgen

Het lijkt erop dat je een dummy rowset wilt hebben .

In MySQL , het is onmogelijk zonder een tafel te hebben.

De meeste grote systemen bieden een manier om dit te doen:

  • 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 mist zoiets en dit is een serieus nadeel.

Ik heb een eenvoudig script geschreven om testgegevens te genereren voor de voorbeeldtabellen in mijn blogposts, misschien heb je er wat aan:

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

Je belt de procedure en de tafel wordt gevuld met de nummers.

Je kunt het hergebruiken tijdens de duur van de sessie.



  1. Hoe doe je mee aan dezelfde tafel, twee keer, in mysql?

  2. SQL JOIN versus IN-prestaties?

  3. SQL Server 2016:altijd versleuteld

  4. Verschil tussen sys.parameters, sys.system_parameters en sys.all_parameters in SQL Server