sql >> Base de Datos >  >> RDS >> Mysql

SQL SELECT para obtener los primeros N enteros positivos

Parece que lo que quieres es un dummy rowset .

En MySQL , es imposible sin tener una mesa.

La mayoría de los principales sistemas proporcionan una forma de hacerlo:

  • En Oracle :

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

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

    SELECT  num
    FROM    generate_series(1, 10) num
    

MySQL carece de algo así y esto es un serio inconveniente.

Escribí un script simple para generar datos de prueba para las tablas de muestra en las publicaciones de mi blog, tal vez sea ú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
$$

Llamas al procedimiento y la tabla se llena con los números.

Puedes reutilizarlo durante la duración de la sesión.