我有一个包含产品属性的表格:
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个子集解决这个问题。
答案 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_id
,language_id
,text
来自product_attribute
WHERE product_id
='1';
在这里,在你的sql(SELECT'product_id'FROM product
)中返回
在共同相关的sql中不可能有多个值。
当内部查询作为字段行为时,它一次只有一个值。