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

SQL SELECT for at få de første N positive heltal

Det ser ud til, at det du ønsker er et dummy rowset .

I MySQL , det er umuligt uden at have et bord.

De fleste større systemer giver en måde at gøre det på:

  • I Oracle :

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

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

    SELECT  num
    FROM    generate_series(1, 10) num
    

MySQL mangler noget som dette, og dette er en alvorlig ulempe.

Jeg skrev et simpelt script til at generere testdata for eksempeltabellerne i mine blogindlæg, måske vil det være nyttigt:

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

Du ringer til proceduren, og bordet bliver fyldt med tallene.

Du kan genbruge det under sessionens varighed.



  1. Sådan beskytter du din MySQL- eller MariaDB-database mod SQL-injektion:Første del

  2. SQL Server 2016:Opret et login

  3. Sådan opretter du en MySQL-installation til lokal test

  4. Find 2. højeste løn bedst mulige måder