使用INSERT INTO和SELECT

时间:2019-11-06 10:23:40

标签: mysql sql database

编辑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_manufacturerid_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' )

现在,问题是,该怎么做?不能同时使用两次 INSERT INTO语法的 ONE SELECT FROM查询。

2 个答案:

答案 0 :(得分:0)

您必须使用insert select语句复制其他表数据。

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

为避免重复输入,您必须创建主键 AUTO_INCREMENT 或为此表创建触发器

答案 1 :(得分:0)

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)