Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

SQL SELECT para obter os primeiros N inteiros positivos


Parece que o que você quer é um dummy rowset .

Em MySQL , é impossível sem ter uma mesa.

A maioria dos principais sistemas fornece uma maneira de fazer isso:

  • Em Oracle :
    SELECT  level
    FROM    dual
    CONNECT BY
            level <= 10
    

  • Em SQL Server :
    WITH    q AS
            (
            SELECT  1 AS num
            UNION ALL
            SELECT  num + 1
            FROM    q
            WHERE   num < 10
            )
    SELECT  *
    FROM    q
    

  • Em PostgreSQL :
    SELECT  num
    FROM    generate_series(1, 10) num
    

MySQL falta algo assim e isso é uma séria desvantagem.

Eu escrevi um script simples para gerar dados de teste para as tabelas de amostra nos meus posts, talvez seja útil:
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
$$

Você chama o procedimento e a mesa é preenchida com os números.

Você pode reutilizá-lo durante a duração da sessão.