2015-05-12 37 views
0

我用下面的代碼在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

是否有'(產品,branch_id)'唯一索引?你可以使用'INSERT IGNORE'來讓它跳過會產生重複的行。 – Barmar

回答

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 
+0

不能有唯一的索引,但左連接工作:) – jakob