我使用下面的代码在mysql中的同一个表中复制和插入数据:
INSERT INTO table (product_id, value, branch_id)
SELECT product_id, value, "71"
FROM table
WHERE branch_id = "53"
适用于复制和插入所有数据。在这种情况下,它使用branch_id = 53复制行,为每个复制的行添加新行,而不是插入53 branch_id 71.
但现在我已经插入了branch_id = 71的行,所以我需要通过声明类似WHERE branch_id = "53" AND product_id != "product_id that already exists in row with branch_id=71"
如何在MySQL中做到这一点?
答案 0 :(得分:1)
如果(product_id, branch_id)
上有唯一的综合索引,您可以使用INSERT IGNORE
。然后,如果它试图创建一个重复的行,它将只是静默地跳过该条目。
如果没有,你可以这样做:
INSERT INTO table (product_id, value, branch_id)
SELECT t1.product_id, t1.value, '71'
FROM table AS t1
LEFT JOIN table AS t2 ON t1.product_id = t2.product_id AND t2.branch_id = '71'
WHERE t1.branch_id = '53' AND t2.product_id IS NULL