编辑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'
)
现在,问题是,该怎么做?不能同时使用两次 INSERT INTO
语法的 ONE SELECT FROM
查询。
答案 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)