Mysql
 sql >> база данни >  >> RDS >> Mysql

Цикъл n пъти без използване на съхранена процедура

MySQL документи за Изявления за контрол на потока кажете:

Документи за Съхранени програми и изгледи кажете:

Синтаксис на сложни изявления

Така че изглежда, че можете да изпълнявате изричен цикъл само в рамките на съхранена процедура, функция или тригер.

В зависимост от това, което правите във вашия SQL израз, може да е приемливо да използвате таблица (или изглед) с числа (Създаване на "Таблица с числа" в mysql , MYSQL:Таблица с последователни номера ).

Ако вашата заявка е SELECT и е добре да върнете резултата от вашия SELECT 10 пъти като един дълъг набор от резултати (за разлика от 10 отделни набора резултати) можете да направите нещо подобно:

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

Пример за INSERT

Препоръчвам ви да имате постоянна таблица с числа във вашата база данни. Полезно е в много случаи. Вижте връзките по-горе как да го генерирате.

Така че, ако имате таблица Numbers с int колона Number със стойности от 1 до, да речем, 100K (както правя аз) и първичен ключ в тази колона, а след това вместо този цикъл:

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;

можете да напишете:

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

Освен това ще работи почти 10 пъти по-бързо.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JDBC връща грешен брой засегнати редове

  2. Къде мога да намеря дневника на транзакциите на MySQL?

  3. MySQL Разделяне / Разделяне / Разделяне - кой път да отидете?

  4. Можете ли да използвате псевдоним в клаузата WHERE в mysql?

  5. Има ли разлика между DATE_SUB() и използването на аритметични оператори за изчисляване на дата и час?