有一個包含三列的表:id, field1, field2
。MySQL:如何在更改之前使用值更新列
還有一行:id=1, field1=1, field2=1
。
運行更新SQL:UPDATE my_table SET field1=field2+1, field2=field1+1 WHERE id=1;
我期望的結果是:ID = 1,FIELD1 = 2,FIELD2 = 2。但事實上,我得到了:id = 1,field1 = 2,field2 = 3。因爲計算field2 = field1 + 1時,field1的值已更改!
我想出一個SQL來解決這個問題:
UPDATE my_table dest, (SELECT * FROM my_table) src
SET dest.field1=src.field2+1, dest.field2=src.field1+1
WHERE dest.id=1;
但是我想插入一條記錄,如果該行是存在的,然後做一個更新,就像上面。
INSERT INTO my_table (id, field1, field2) VALUES(1, 1, 1)
ON DUPLICATE KEY UPDATE
field1=field2+1, field2=field1+1;
該SQL與第一個SQL的問題相同。那麼如何使用ON DUPLICATE KEY UPDATE
子句更改前的值來執行此更新?
感謝您的幫助!
順便說一句,使用'集合A = B,B =直接了'交換兩列工作在其他所有DBMS中,只有mysql不遵循標準SQL並將其傾斜: – dnoeth
Temp變量是一個好主意!但是,在INSERT ... ON DUPLICATE KEY UPDATE ...中使用temp變量的語法是什麼? – someblue