沒有玩ON DUPLICATE KEY...我不确定,是否可以處理這種情況。我會通過使用另一個(臨時)表來解決它。
它與target_table和一個列(在示例sid中)的結構相同,以訓示該條目是否存在于target_table中。
CREATE TEMPORARY TABLE tmp_whatever (
sid int,
id int, image varchar(50)
);
現在我們首先将要插入到target_table中的資料插入到新建立的表中,如果條目已存在,則使用coalesce()和left join進行檢查。我在這裡假設,id是你的主鍵。
INSERT INTO tmp_whatever (sid, id, image)
SELECT
COALESCE(t.id, 0),
id, image
FROM (
SELECT 112 AS id,'asdf.jpg' AS image
UNION ALL
SELECT 113,'foobar.png'
) your_values v
LEFT JOIN your_target_table t ON v.id = t.id;
然後我們更新target_table ......
UPDATE your_target_table t INNER JOIN tmp_whatever w ON t.id = w.id AND w.sid <> 0
SET t.image = w.image
WHERE t.image_uploaded = 0;
最後我們插入不存在的行......
INSERT INTO your_target_table (id, image)
SELECT
id, image
FROM tmp_whatever
WHERE sid = 0;
當我寫這篇文章時,我想到了,我可能對你的問題有錯誤的假設。此
更糟糕的是:它正常工作但不是我想要的。
絕對不是提出問題或描述問題的方式。我回答是因為我有一個美好的一天:)(這就是你得到downvotes的原因,順便說一句)
無論如何,“不是我想要的”的另一個原因可能是,你錯過了表中的唯一索引。雖然主鍵是唯一鍵,但afaik / iirc ON DUPLICATE KEY依賴于另一列上的唯一索引才能正常工作。