3列のテーブル:id, field1, field2
があります。MySQL:変更前の値を使用して列を更新する方法
行があります。id=1, field1=1, field2=1
です。
実行更新SQL:ID = 1、フィールド1 = 2、フィールド2 = 2:UPDATE my_table SET field1=field2+1, field2=field1+1 WHERE id=1;
私は結果が期待。しかし、実際に私は得た: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
句で使用してこの更新を行うにはどうすればよいですか?
ありがとうございました!
ところで:フィールドIDは、IF句を使用する必要がある場合
は、exprはのような、より複雑になります他のすべてのDBMSでは、mysqlだけが標準SQLに従わずにスキューアップします。( – dnoeth
一時変数は良い考えです!しかし、INSERT ... ON DUPLICATE KEY UPDATE ...で一時変数を使用する構文は何ですか? – someblue