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

Loop n gange uden at bruge en lagret procedure

MySQL-dokumenter på Flowkontrolerklæringer sige:

Dokumenter på lagrede programmer og visninger sige:

Syntaks for sammensat erklæring

Så det ser ud til, at du kun kan køre en eksplicit loop inden for en lagret procedure, funktion eller trigger.

Afhængigt af hvad du gør i din SQL-sætning, kan det være acceptabelt at bruge en tabel (eller visning) af tal (Oprettelse af en "Numbers Table" i mysql , MYSQL:Sequential Number Table ).

Hvis din forespørgsel er en SELECT og det er OK at returnere resultatet af din SELECT 10 gange som et langt resultatsæt (i modsætning til 10 separate resultatsæt) kan du gøre noget som dette:

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
 

Eksempel på INSERT

Jeg anbefaler at have en permanent tabel med tal i din database. Det er nyttigt i mange tilfælde. Se linkene ovenfor, hvordan du genererer det.

Så hvis du har en tabel Numbers med int kolonne Number med værdier fra 1 til f.eks. 100K (som jeg gør), og primærnøgle på denne kolonne, så i stedet for denne sløjfe:

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;

du kan skrive:

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

Det ville også virke næsten 10 gange hurtigere.



  1. Hvordan indsætter man en opdaterbar post med JSON-kolonne i PostgreSQL ved hjælp af JOOQ?

  2. Hvordan CONCAT_WS() virker i PostgreSQL

  3. Sådan fjerner du den rigtige polstring på dagsnavnet i Oracle

  4. MySQL fjernforbindelse mislykkes med ukendt godkendelsesmetode