sql >> Database >  >> RDS >> Mysql

Loop n keer zonder een opgeslagen procedure te gebruiken

MySQL-documenten over Flow Control-verklaringen zeg:

Documenten op Opgeslagen programma's en weergaven zeg:

Samengestelde-statementsyntaxis

Het lijkt er dus op dat u alleen een expliciete lus kunt uitvoeren binnen een opgeslagen procedure, functie of trigger.

Afhankelijk van wat u in uw SQL-instructie doet, kan het acceptabel zijn om een ​​tabel (of weergave) van getallen te gebruiken (Een "Getallentabel" maken in mysql , MYSQL:volgnummertabel ).

Als uw zoekopdracht een SELECT . is en het is OK om het resultaat van uw SELECT . te retourneren 10 keer als één lange resultatenset (in tegenstelling tot 10 afzonderlijke resultatensets) kun je zoiets als dit doen:

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

Voorbeeld voor INSERT

Ik raad aan om een ​​permanente tabel met getallen in uw database te hebben. Het is in veel gevallen handig. Zie de links hierboven hoe u het kunt genereren.

Dus, als je een tabel Numbers . hebt met int kolom Number met waarden van 1 tot, laten we zeggen, 100K (zoals ik doe), en primaire sleutel in deze kolom, dan in plaats van deze lus:

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;

je kunt schrijven:

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

Het zou ook bijna 10 keer sneller werken.



  1. krijg laatst ingevoegde id in sql server 2008

  2. Wat is het verschil tussen VARCHAR en CHAR?

  3. MySQL-fout 1118 (rijgrootte te groot) bij het herstellen van de Django-mailer-database

  4. Een lijst krijgen van alle functies en procedures in een Oracle-database