sql >> Databáze >  >> RDS >> Mysql

Opakujte nkrát bez použití uložené procedury

Dokumenty MySQL na Prohlášení o řízení toku řekni:

Dokumenty na Uložené programy a zobrazení řekni:

Syntaxe složeného příkazu

Takže to vypadá, že můžete spustit explicitní smyčku pouze v rámci uložené procedury, funkce nebo triggeru.

V závislosti na tom, co děláte v příkazu SQL, může být přijatelné použít tabulku (nebo zobrazení) čísel (Vytvoření "tabulky čísel" v mysql , MYSQL:Tabulka sekvenčních čísel ).

Pokud je váš dotaz SELECT a je v pořádku vrátit výsledek vašeho SELECT 10krát jako jedna dlouhá sada výsledků (na rozdíl od 10 samostatných sad výsledků) můžete udělat něco takového:

SELECT MainQuery.*
FROM
    (
        SELECT 1 AS Number 
        UNION ALL SELECT 2
        UNION ALL SELECT 3
        UNION ALL SELECT 4
        UNION ALL SELECT 5
        UNION ALL SELECT 6
        UNION ALL SELECT 7
        UNION ALL SELECT 8
        UNION ALL SELECT 9
        UNION ALL SELECT 10
    ) AS Numbers
    CROSS JOIN
    (
        SELECT 'some data' AS Result
    ) AS MainQuery

Příklad pro INSERT

Doporučuji mít ve své databázi stálou tabulku čísel. Je to užitečné v mnoha případech. Viz výše uvedené odkazy, jak jej vygenerovat.

Pokud tedy máte tabulku Numbers s int sloupec Number s hodnotami od 1 do, řekněme, 100K (jako já) a primárním klíčem v tomto sloupci, pak místo této smyčky:

DECLARE count INT DEFAULT 0;
WHILE count < 10 DO
    INSERT INTO table_name(col1,col2,col3) 
    VALUES("val1","val2",count);

    SET count = count + 1;
END WHILE;

můžete napsat:

INSERT INTO table_name(col1,col2,col3)
SELECT ("val1", "val2", Numbers.Number-1)
FROM Numbers
WHERE Numbers.Number <= 10;

Fungovalo by to také téměř 10krát rychleji.



  1. Jak opravit zastaralé oracle.sql.ArrayDescriptor, oracle.sql.STRUCT a oracle.sql.StructDescriptor

  2. MYSQL UPDATE SET ve stejném sloupci, ale s více klauzulemi WHERE

  3. PyMySQL vrací staré/hodnoty snímku/neopakuje dotaz?

  4. Python SQL – Jak používat databáze SQLite, MySQL a PostgreSQL s Pythonem