Mysql
 sql >> Base de données >  >> RDS >> Mysql

SQL SELECT pour obtenir les N premiers entiers positifs

Il semble que ce que vous voulez est un dummy rowset .

En MySQL , c'est impossible sans table.

La plupart des principaux systèmes offrent un moyen de le faire :

  • Dans Oracle :

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

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

    SELECT  num
    FROM    generate_series(1, 10) num
    

MySQL manque quelque chose comme ça et c'est un sérieux inconvénient.

J'ai écrit un script simple pour générer des données de test pour les exemples de tableaux dans mes articles de blog, peut-être qu'il sera 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
$$

Vous appelez la procédure et le tableau se remplit avec les nombres.

Vous pouvez le réutiliser pendant la durée de la session.