2013-03-02 89 views
1

我想創建一個查詢,將在同一時間添加/更新多行,我試圖確保它通過更新除私鑰以外的所有值正確處理重複鍵,在我的情況下是a.id重複多次更新

INSERT INTO products a (a.id, a.price, a.condition, a.link, a.price_updated) 
VALUES ('t1', 11, 'used', 'adasd', 100), ('t2', 11, 'used', 'adasd', 100) 
ON DUPLICATE KEY UPDATE VALUES (a.price, a.condition, a.link, a.price_updated) 

上述查詢給我靠近a (a.id一個正確的語法錯誤,有什麼事情我做錯了?

任何想法?

回答

2

我認爲這是你在找什麼:

INSERT INTO products (id, price, cond, link, price_updated) 
VALUES ('t1', 11, 'used', 'adasd', 100), 
    ('t1', 11, 'used', 'adasd', 2100) 
ON DUPLICATE KEY UPDATE 
    price = VALUES(price), 
    cond = VALUES(cond), 
    link = VALUES(link), 
    price_updated = VALUES(price_updated) 

SQL Fiddle Demo

我不認爲你可以使用此表的別名要麼,但我可能是錯誤的。

順便說一句 - 我使用條件域的cond只是爲了讓它更容易 - 用你的域名替換(你可能需要返回條件,因爲我相信它是一個保留字)。

+0

你的正確的條件是一個保留字,這看起來不錯,謝謝 – 2013-03-03 00:01:06

+1

@ mk_89 - np,很高興我們可以幫助! – sgeddes 2013-03-03 00:01:40

1

由於Mysql的INSERT語句不允許您別名插入的表,因此會出現語法錯誤:您必須說INSERT INTO products (id, ...)

+0

啊我明白 – 2013-03-02 23:53:55

+1

@ mk_89 - 這不是查詢的唯一問題。您還需要修復您的UPDATE語法。看到我的帖子上面。 – sgeddes 2013-03-02 23:57:06

+1

確實(我只是在解釋錯誤的來源)。 – alexis 2013-03-02 23:59:33