sql >> Databáze >  >> RDS >> Mysql

SQL SELECT pro získání prvních N kladných celých čísel

Zdá se, že to, co chcete, je dummy rowset .

V MySQL , je to nemožné bez stolu.

Většina hlavních systémů poskytuje způsob, jak to udělat:

  • V Oracle :

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

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

    SELECT  num
    FROM    generate_series(1, 10) num
    

MySQL něco takového postrádá a to je vážná nevýhoda.

Napsal jsem jednoduchý skript pro generování testovacích dat pro vzorové tabulky v mých příspěvcích na blogu, možná se bude hodit:

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

Zavoláte proceduru a tabulka se zaplní čísly.

Během trvání relace jej můžete znovu použít.



  1. SQL, Postgres OID, co to jsou a proč jsou užitečné?

  2. SQLite - příkazy JOIN

  3. Jak používat EXECUTE FORMAT ... POUŽÍVÁNÍ ve funkci postgres

  4. SQL:Pokud jde o NOT IN a NOT EQUAL TO, co je efektivnější a proč?