好的,我在product_to_store
表中有以下结构:
+----------------------+--------------------+
| product_id - int(11) | store_id - int(11) |
+----------------------+--------------------+
+----------------------+--------------------+
| 1000 | 0 |
| 1000 | 6 |
| 1005 | 0 |
| 1010 | 0 |
| 1010 | 6 |
...
基本上,每store_id
我需要6
值product_id
。例如,ID为product_id
的产品(1005
)的store_id
记录只有0
。我希望它有另一条product_id
等于6
的记录/行。标识为1000
和1010
的商品应该是这样的(他们的store_id
记录等于6
)。
我尝试运行以下查询,以便插入仅设置product_id
的新行:
INSERT INTO `product_to_store`
(product_id) SELECT `product_id`
FROM `product_to_store`
WHERE product_id != 6
然后考虑运行另一个查询来更新store_id
为null
的所有行,其值为6
。但是,我得到了:
#1062 - Duplicate entry '1000-0' for key 'PRIMARY'
。
我可以用任何方式实现这一点,而不必在PHP中使用循环或者说不实用的东西?
答案 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;
答案 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)