Добавление разных строк из разных таблиц в другую таблицу с помощью INSERT INTO и SELECT - PullRequest
0 голосов
/ 06 ноября 2019

РЕДАКТИРОВАТЬ 2: Оригинальный пост вызвал больше путаницы в решении проблем, поэтому я решил объяснить всю ситуацию в деталях.

Позвольте мне прояснить всю ситуацию ...

Я работаю над электронной коммерцией CMS (Prestashop). Владельцы сайтов по ошибке добавили всех производителей (идентификатор, имя, описание) в качестве категорий.

Я хочу создать правильную структуру для таблицы производителей, чтобы мы могли исправить эту проблему.

Позвольте мне объяснить всю структурутаблицы ps_manufacturer_lang, которую необходимо заполнить (в ней нет значения).

Таблица ps_manufacturer_lang имеет четыре columns имени:
1. id_manufacturer
2. id_lang
3. description
4. short_description

Вот значения, которые необходимо вставить:
1. id_manufacturer следует заполнить значениями из таблицы ps_manufacturer.
2. id_lang должно быть 1.
3. description должен быть заполнен значениями из таблицы ps_category_lang с определенным предложением WHERE.
4. short_description должно быть NULL.

Перейдем к запросам:
1. Этот INSERT INTO запрос заполняет id_manufacturer и id_lang правильно:
INSERT INTO ps_manufacturer_lang (id_manufacturer, id_lang) SELECT id_manufacturer, 1 FROM ps_manufacturer

2. Этот INSERT INTO запрос заполняет описание правильно:
INSERT INTO ps_manufacturer_lang (description) SELECT description FROM ps_category_lang WHERE id_lang='1' AND id_category IN ( SELECT id_category FROM ps_category WHERE id_parent='241' )

Теперь вопрос в том, как это сделать? Невозможно использовать два запроса ONE INSERT INTO с TWO SELECT FROM синтаксисами.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019
drop table if exists ps_manufacturer_lang,ps_manufacturer,ps_category_lang;

create table ps_manufacturer_lang
(id_manufacturer int primary key,
id_lang int,
description varchar(20),
short_description   varchar(20));

create table ps_manufacturer
(id int);

create table ps_category_lang
(id int, description varchar(20), id_parent int);

insert into ps_manufacturer values (1),(2);
insert into ps_category_lang values
(1,'aaa',241),
(2,'bbb',241);

insert into ps_manufacturer_lang 
select pm.id,1,pl.description,null
from   ps_manufacturer pm
join   ps_category_lang pl on pl.id = 1 and id_parent = 241;

select * from ps_manufacturer_lang;

+-----------------+---------+-------------+-------------------+
| id_manufacturer | id_lang | description | short_description |
+-----------------+---------+-------------+-------------------+
|               1 |       1 | aaa         | NULL              |
|               2 |       1 | aaa         | NULL              |
+-----------------+---------+-------------+-------------------+
2 rows in set (0.00 sec)
0 голосов
/ 06 ноября 2019

Вы должны использовать оператор вставки select, чтобы скопировать данные других таблиц.

INSERT INTO ps_manufacturer_lang (description)
SELECT description
FROM ps_category_lang 
"your specific where condition"

Чтобы избежать дублирования записи, вы должны сделать первичный ключ AUTO_INCREMENT или создать триггер для этой таблицы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...