sql >> Databasteknik >  >> RDS >> Mysql

SQL SELECT för att få de första N positiva heltalen

Det verkar som att det du vill ha är en dummy rowset .

I MySQL , det är omöjligt utan att ha ett bord.

De flesta större system erbjuder ett sätt att göra det:

  • I Oracle :

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

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

    SELECT  num
    FROM    generate_series(1, 10) num
    

MySQL saknar något liknande och detta är en allvarlig nackdel.

Jag skrev ett enkelt skript för att generera testdata för exempeltabellerna i mina blogginlägg, det kanske kommer att vara till nytta:

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

Du ringer proceduren och tabellen fylls med siffrorna.

Du kan återanvända den under sessionens varaktighet.



  1. Codds regler i SQL

  2. Hur Round() fungerar i SQLite

  3. Hur lägger man till PostgreSQL-datakälla till WildFly 9.0?

  4. Alternativ för justering av prestanda för Azure SQL Database