#mysql #sql
Пусть имеется таблица tests с единственным столбцом title CREATE TABLE tests ( title varchar(256) NOT NULL ); Как можно заполнить ее 1 000 000 тестовых записей?
Ответы
Ответ 1
Создадим таблицу samples с точно такой же структурой, что и таблица tests. Заполним ее 10 тестовыми записями. CREATE TABLE samples ( title varchar(256) NOT NULL ); INSERT INTO samples (title) VALUES ('8iRDgsEIq4GmOs32FnHM3b3cH60n3mm8070'), ('UAmsXyrKgApfHMyV2kUrYqLphN99Q7TJSoe'), ('OX1qiFeTigcOTO5JVvgFk7MRDgjgatkTqwL'), ('CT9Kfbplp4QC87G32UIKlkGd31jdjt4qH4f'), ('WsAhjBL5tAgihYZBtX97FNUmEpXavhb4CRw'), ('LwaitJ5dieXyixEmjJXhhqDY8Zg9Tu5ecoV'), ('KpHsnqrcMCpkRxkGNMjEJV0jFaeucPtbLWe'), ('t2GSIDOvW14eMlroAWrRR6xU5DoeNUXY0lD'), ('rSvrEPxR8rcw7QYjXfeNdyf3LpqYNHu3W7a'), ('6liUHPkjnygSatoUB4juZ5TaJZjaxHpR4BL'); Для того, чтобы превратить 10 записей из таблицы samples в 1 000 000 записей произведем самообъединение таблицы samples шесть раз SELECT fst.title FROM samples AS fst, samples AS snd, samples AS thd, samples AS fth, samples AS fif, samples AS sth; Оператор JOIN, который в SQL может быть заменен обычной запятой, осуществляет декартово соединение таблиц, когда каждой записи одной таблицы сопоставляется каждая запись другой таблицы. Таким образом, если в одной таблице 10 записей и в другой таблице 10 записей, результирующая таблица, полученная их соединением через JOIN будет содержать 100 записей. Как нетрудно увидеть 10 x 10 x 10 x 10 x 10 x 10 = 1 000 000 записей Если в таблице samples будет 100 записей, для получения 1 000 000 записей будет достаточно соединений трех таких таблиц, если в samples будет 1000 записей, будет достаточно объединить таблицу саму с собой один раз. Вставить результат в целевую таблицу tests можно при помощи оператора INSERT ... SELECT ... INSERT INTO tests SELECT fst.title FROM samples AS fst, samples AS snd, samples AS thd, samples AS fth, samples AS fif, samples AS sth;
Комментариев нет:
Отправить комментарий