Dokumen MySQL di Pernyataan Kontrol Aliran katakan:
Dokumen di Program dan Tampilan Tersimpan katakan:
Jadi, sepertinya Anda dapat menjalankan loop eksplisit hanya dalam prosedur, fungsi, atau pemicu yang tersimpan.
Bergantung pada apa yang Anda lakukan dalam pernyataan SQL Anda, mungkin dapat diterima untuk menggunakan tabel (atau tampilan) angka (Membuat "Tabel Angka" di mysql , MYSQL:Tabel Nomor Sequential ).
Jika kueri Anda adalah SELECT
dan boleh saja mengembalikan hasil SELECT
. Anda 10 kali sebagai satu set hasil yang panjang (sebagai lawan dari 10 set hasil terpisah), Anda dapat melakukan sesuatu seperti ini:
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
Contoh untuk INSERT
Saya merekomendasikan untuk memiliki tabel angka permanen di database Anda. Ini berguna dalam banyak kasus. Lihat tautan di atas cara membuatnya.
Jadi, jika Anda memiliki tabel Numbers
dengan int
kolom Number
dengan nilai dari 1 hingga, katakanlah, 100K (seperti yang saya lakukan), dan kunci utama pada kolom ini, lalu alih-alih loop ini:
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;
Anda dapat menulis:
INSERT INTO table_name(col1,col2,col3)
SELECT ("val1", "val2", Numbers.Number-1)
FROM Numbers
WHERE Numbers.Number <= 10;
Ini juga akan bekerja hampir 10 kali lebih cepat.