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_id
,language_id
,text
来自 product_attribute
其中 product_id
= '1';
这里,在你的 sql (SELECT 'product_id' FROM product
) returns
多个值不可能在相关 sql.
中
当内部查询表现为一个字段时,它一次只有一个值。
我有一个 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.
这是我目前所拥有的,但它不起作用。
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_id
,language_id
,text
来自 product_attribute
其中 product_id
= '1';
这里,在你的 sql (SELECT 'product_id' FROM product
) returns
多个值不可能在相关 sql.
当内部查询表现为一个字段时,它一次只有一个值。