2009-01-16 51 views
59

重複鍵UPDATE我想要做這樣的事情INSERT INTO .. ON爲多個項目

INSERT INTO t (t.a, t.b, t.c) 
VALUES ('key1','key2','value') 
ON DUPLICATE KEY UPDATE 
t.c = 'value'; 
INSERT INTO t (t.a, t.b, t.c) 
VALUES ('key1','key3','value2') 
ON DUPLICATE KEY UPDATE 
t.c = 'value2'; 

T.A和t.b是關鍵。這一切工作正常,但我得到第二次插入錯誤。用phpMyAdmin這樣的查詢工作正常,但我猜測它獨立運行查詢,因爲它將該查詢的結果作爲註釋打印出來?

這樣的事情也會很好,但我需要爲每個項目有不同的值。我更喜歡這個,但我不知道我可以如何更改每個值的更新值。

INSERT INTO t (t.a, t.b, t.c) 
VALUES ('key1','key2','value'), ('key1','key3','value2') 
ON DUPLICATE KEY UPDATE 
t.c = ??? 

問題出在問號上,我該如何放置以便每個插入/更新都具有正確的值?很顯然,如果我把一個值放在那裏,所有的字段都會得到這個值。

如果有另一種方式做「更新如果存在,否則插入」查詢多個字段與兩個鍵,我也爲其他想法了。我想我可以單獨運行每個查詢(如phpMyAdmin?),但這將是很多查詢,所以我真的想避免這種情況。

回答

36

上代表徵求意見太低,但我想添加一個稍微複雜的語法,這是ʞɔıu響應靈感來自@。要更新重複鍵上的多個字段:

INSERT INTO t (t.a, t.b, t.c, t.d) 
VALUES ('key1','key2','value','valueb'), ('key1','key3','value2','value2b') 
ON DUPLICATE KEY UPDATE 
t.c = VALUES(t.c), 
t.d = VALUES(t.d) 

希望能幫助有人在那裏尋找使用多重鍵更新執行批量插入。語法逃脫了我。