INSERT с динамической подстановкой в VALUE - MySQL
Формулировка задачи:
У меня есть таблица `company`, у которой есть поля `id`, `company_name`, `parent_id`. И у меня есть переменная(name), в которой хранится `company_name` . Таким образом, у меня получается 2 запроса:
1. select `id` from `company` where `company_name` = name;
После того как я узнаю необходимый `id`, я записываю это значение в переменную(parentID) и делаю другой запрос
2. INSERT INTO `company` (`company_name`, `parent_id`) VALUES ( name, parentID);
Таким образом у меня получается 2 запроса, что не есть хорошо. Вопрос: можна их каким-то образом обьеденить в один, чтобы находить нужный `id` зная имя уже при самой вставке? спасибо.
Решение задачи: «INSERT с динамической подстановкой в VALUE»
textual
Листинг программы
INSERT INTO `company` (`company_name`, `parent_id`) VALUES (name, (SELECT * FROM (SELECT `id` FROM `company` WHERE `company_name` = name) AS tmp));
Объяснение кода листинга программы
В данном коде выполняется следующая последовательность действий:
INSERT INTO– команда добавления новой записи в таблицу.company– название таблицы, в которую добавляется запись.(company_name,parent_id)– название и значение столбцов, в которые добавляется запись.(name)– подставляемое значение в название и значение столбца.VALUES– указывает, что следующая строка содержит значения для вставки.(SELECT * FROM (SELECTidFROMcompanyWHEREcompany_name= name) AS tmp)– подзапрос, результат которого будет использоваться при вставке записи.AS tmp– псевдоним для временной таблицы, созданной в подзапросе. Таким образом, в данном коде выполняется вставка записи в таблицуcompanyс использованием подзапроса, который возвращает значение столбцаidдля компании с названиемname. Значенияnameи(SELECT * FROM (SELECTidFROMcompanyWHEREcompany_name= name) AS tmp)являются динамическими и подставляются в запрос при его выполнении.