Сложный запрос на добавление строки - MySQL
Формулировка задачи:
Доброго времени суток)
Есть таблица, которая содержит в себе имена других таблиц и их русскоязычное описание. Так же есть таблица со странами, регионами с которых нужно брать идентификатор по названию.
1) можно ли создать запрос на добавление что то вроде такого 2) устанавливать значения полей при помощи вложенных запровов 3) корректна ли такая запись вообще
4) как правильно реализовать такую возможность.
INSERT INTO IN (SELECT name FROM serviceData WHERE discription = 'описание') VALUES ('значение','значение','значение','значение');INSERT INTO IN (SELECT name FROM serviceData WHERE discription = 'описание') VALUES ('значение','значение',IN (SELECT id FROM country WHERE name = 'значение'),'значение');Решение задачи: «Сложный запрос на добавление строки»
textual
Листинг программы
mysql> select * from test;
+--------+
| field |
+--------+
| field1 |
| field2 |
| field3 |
+--------+
3 rows in set (0.00 sec)
mysql> select group_concat( `field` ) from test;
+-------------------------+
| group_concat( `field` ) |
+-------------------------+
| field1,field2,field3 |
+-------------------------+
select concat( 'insert into `Table`(' , group_concat( `field` ) , ')' ) from test;
+------------------------------------------------------------------+
| concat( 'insert into `Table`(' , group_concat( `field` ) , ')' ) |
+------------------------------------------------------------------+
| insert into `Table`(field1,field2,field3) |
+------------------------------------------------------------------+
Объяснение кода листинга программы
mysql>— командная строка для взаимодействия с базой данныхselect * from test;— запрос на выборку всех данных из таблицыtest+--------+— формат вывода результатов запроса (каждая строка выводится на новой строке, первый столбец выводится по центру, столбцы разделены символом+и т.д.)field— название поля таблицыtestgroup_concat(field)— функция агрегирования, объединяющая значения поля в одну строку, разделенные запятымиselect concat( 'insert intoTable(' , group_concat(field) , ')' ) from test;— запрос на выборку строки, объединяющей названия полей и их значения в одну строку для вставки в таблицуTable+------------------------------------------------------------------+— формат вывода результатов запроса (каждая строка выводится на новой строке, первый столбец выводится по центру, столбцы разделены символом+и т.д.)insert intoTable(field1,field2,field3) — SQL-команда на вставку строки в таблицуTable` с указанием названий полей и их значений в скобках