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 (SELECT
idFROM
companyWHERE
company_name= name) AS tmp)
– подзапрос, результат которого будет использоваться при вставке записи.AS tmp
– псевдоним для временной таблицы, созданной в подзапросе. Таким образом, в данном коде выполняется вставка записи в таблицуcompany
с использованием подзапроса, который возвращает значение столбцаid
для компании с названиемname
. Значенияname
и(SELECT * FROM (SELECT
idFROM
companyWHERE
company_name= name) AS tmp)
являются динамическими и подставляются в запрос при его выполнении.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д