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

mysql insert 2 subsets from 2 different tables

我有一个 table 具有产品属性:

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 的 table,其中有多个 product_ids 在 product_attributes table 中不存在。 我想从 product_attributes 复制所有数据,其中 product_id = 1 并将它们插入 product table.

中的所有 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';

它说子查询 returns 超过 1 行(确实如此,这就是重点),我只是不知道如何用 2 个子集解决这个问题。

(SELECT 'product_id' FROM `product`)

在这个查询中应该return不止一行。 我认为应该不需要这个查询。

使用交叉连接:

[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' 来自 product),attribute_idlanguage_idtext 来自 product_attribute 其中 product_id = '1';

这里,在你的 sql (SELECT 'product_id' FROM product) returns 多个值不可能在相关 sql.

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