将表中一列的多行插入同一表中的同一列

时间:2016-09-22 22:45:05

标签: mysql sql

好的,我在product_to_store表中有以下结构:

+----------------------+--------------------+
| product_id - int(11) | store_id - int(11) |
+----------------------+--------------------+
+----------------------+--------------------+
| 1000                 | 0                  |
| 1000                 | 6                  |
| 1005                 | 0                  |
| 1010                 | 0                  |
| 1010                 | 6                  |
...

基本上,每store_id我需要6product_id。例如,ID为product_id的产品(1005)的store_id记录只有0。我希望它有另一条product_id等于6的记录/行。标识为10001010的商品应该是这样的(他们的store_id记录等于6)。

我尝试运行以下查询,以便插入仅设置product_id的新行:

INSERT INTO `product_to_store` 
        (product_id) SELECT `product_id` 
                     FROM `product_to_store` 
                     WHERE product_id != 6

然后考虑运行另一个查询来更新store_idnull的所有行,其值为6。但是,我得到了:

#1062 - Duplicate entry '1000-0' for key 'PRIMARY'

我可以用任何方式实现这一点,而不必在PHP中使用循环或者说不实用的东西?

2 个答案:

答案 0 :(得分:2)

INSERT INTO `product_to_store` (product_id,store_id) 
SELECT DISTINCT p1.product_id, 6 as store_id
FROM
  product_to_store p1
  LEFT JOIN product_to_store x
  ON p1.product_id = x.product_id
  AND x.store_id = 6
WHERE
  x.product_id IS NULL;

http://sqlfiddle.com/#!9/01ac7a

答案 1 :(得分:1)

您基本上想要在尚不存在store_id为6的产品的情况下插入产品。

INSERT INTO `product_to_store` (product_id,store_id) 
SELECT DISTINCT product_id, 6 as store_id
FROM product_to_store p1
WHERE NOT EXISTS (SELECT 1 FROM product_to_store p2 WHERE p2.store_id = 6
                  AND p2.product_id = p1.product_id)
相关问题