在同一表中复制数据时排除特定行的插入

时间:2015-05-12 16:57:43

标签: mysql sql

我使用下面的代码在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中做到这一点?

1 个答案:

答案 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