Mysql
 sql >> Database >  >> RDS >> Mysql

SQL SELECT per ottenere i primi N numeri interi positivi

Sembra che quello che vuoi sia un dummy rowset .

In MySQL , è impossibile senza un tavolo.

La maggior parte dei principali sistemi fornisce un modo per farlo:

  • 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 manca qualcosa del genere e questo è un grave inconveniente.

Ho scritto un semplice script per generare dati di test per le tabelle di esempio nei miei post sul blog, forse sarà utile:

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

Chiama la procedura e il tavolo si riempie di numeri.

Puoi riutilizzarlo durante la durata della sessione.