mysql从2个不同的表中插入2个子集

时间:2015-08-03 12:34:21

标签: mysql join insert subset sql-insert

我有一个包含产品属性的表格:

product_attributes
+------------+--------------+-------------+------+
| product_id | attribute_id | language_id | text |
+------------+--------------+-------------+------+
| 1          | 2            | 2           | bla  |
| 1          | 2            | 3           | blo  |
| 1          | 3            | 2           | foo  |
| 1          | 4            | 3           | bar  |
+------------+--------------+-------------+------+

我有一个名为product的表,其中有多个product_id,product_attributes表中不存在。 我想复制来自product_attributes product_id = 1的所有数据,并将其插入product表中的所有ID。

这是我到目前为止所做的,但它不起作用。

INSERT INTO `product_attribute`(`product_id`, `attribute_id`, `language_id`, `text`) SELECT (SELECT 'product_id' FROM `product`), `attribute_id`, `language_id`, `text` FROM `product_attribute` WHERE `product_id` = '1';

它表示子查询返回超过1行(它确实是这一点,这是重点),我只是不知道如何用2个子集解决这个问题。

2 个答案:

答案 0 :(得分:0)

(SELECT 'product_id' FROM `product`)

在此查询中应返回多行。 我认为不需要这个查询。

答案 1 :(得分:0)

使用交叉联接:

[1]解决方案:

INSERT INTO `product_attributes`(`product_id`, `attribute_id`,`language_id`, `text`) 
select product_id,v.attribute_id,v.language_id,v.text 
from product
cross join (SELECT  attribute_id, language_id, text 
            FROM product_attributes            
            WHERE product_id = '1') v ;

[2]解决方案:

INSERT INTO `product_attributes`(`product_id`, `attribute_id`,`language_id`, `text`) 
select b.product_id,`attribute_id`, `language_id`, `text`
from product_attributes a 
CROSS join  product b 

使用上面的sql查询它是完美的,它没有错误。

你的sql:

INSERT INTO `product_attribute`(`product_id`, `attribute_id`, `language_id`, `text`) 

SELECT(SELECT'product_id'FROM product),attribute_idlanguage_idtext   来自product_attribute   WHERE product_id ='1';

在这里,在你的sql(SELECT'product_id'FROM product)中返回 在共同相关的sql中不可能有多个值。

当内部查询作为字段行为时,它一次只有一个值。