天天看點

mysql flag_MySQL Update set僅在flag = 0時設定值

沒有玩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依賴于另一列上的唯一索引才能正常工作。