Вкладені запити у операторі INSERT
За допомогою вкладеного select-запиту оператор insert дозволяє швидковставляти безліч записів з іншої (інших) таблиць.
Зауваження
Даний вид запитів з'явився у версії 3.23, тому синтаксис не вимагає записувативкладений запит в обов'язкові круглі дужки.
Представлені в попередньому розділі вкладені запити дозволяли заповнититаблицю new_orders тільки в момент створення. Однак якщо вже після створення таблиці клієнти оформляють угоди, то інформація в таблиціnew_orders втрачає свою актуальність. Виходом із ситуації буде створеннятаблиці new_orders за допомогою звичайного оператора create table(наступний приклад) з подальшим її оновленням.
CREATE TABLE neworders (
id_order INT(11) NOT NULL AUTO_INCREMENT,
user TINYTEXT,
ordertime DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
number INT(11) NOT NULL DEFAULT '0',
product TINYTEXT,
PRIMARY KEY (id order))
ENGINE MyISAM DEFAULT CHARSET=cpl251;
У пропозиції from вкладеного запиту може з'являтися ім'я таблиці, в яку проводиться додавання нових записів. Ця можливість з'явилася в СУБДMySQL, починаючи з версії 4.0.14
Якщо число стовпців в таблиці, в яку відбувається вставка нових записів, і у вкладеному запиті не збігається і частина стовпців отримує значення заумовчанням або якщо порядок слідування стовпців у вкладеному запиті незбігається з порядком слідування стовпців в цільовій таблиці, можнаскористатися конструкцією values ??оператора insert , яка дозволяє задати іменастовпців і їх порядок при додаванні (приклад).
insert into new_orders
values (id_order, ordertime, product, user)
select orders.id_order as id_order,
orders .ordertirne as ordertime,
products.name as product
concat(users.surname, " ", substring(users.name, 1,1), " ",
substring(users.patronymic,1,1), ".") as user
from orders, users, products
where orders.id_user = users.id_user and
orders.id_product = products.id_product;