0
あなたは列A、B、Cを持っているとしましょう。重複キーで、A = {ここにいくつかのステートメント}、B = {ここにいくつかのステートメント}、C = New_A + New_Bとしましょう。 Cの新しい値を決定するために、AとBの新しい値を使うことができますか?あるいは新しいAとBの式を再入力する必要がありますか?ありがとう!重複したキー更新で更新値を再利用できますか?
あなたは列A、B、Cを持っているとしましょう。重複キーで、A = {ここにいくつかのステートメント}、B = {ここにいくつかのステートメント}、C = New_A + New_Bとしましょう。 Cの新しい値を決定するために、AとBの新しい値を使うことができますか?あるいは新しいAとBの式を再入力する必要がありますか?ありがとう!重複したキー更新で更新値を再利用できますか?
私はあなたがそれを行うことができると思います。あなたがそうなら:
ON DUPLICATE KEY UPDATE
A = A + 1, B = B * 2,
C = A + B
私は更新が左から右に実行されると思います。したがって、C = A + B
になると、A
とB
に新しい値が含まれます。
ああ、うまくいくようです。便利で論理的な、ありがとう! ['VALUES()'関数](http://dev.mysql.com/doc/refman/5.7/en/)より、 'C = VALUES(A)+ VALUES(B)'の方がもう少し決定的になります。 – zojwek
miscellaneous-functions.html#function_values)は新しい値を提供することが保証されていますが、左から右への動作は幸運な事故ではあります。標準のSQLでは、 'UPDATE t1 SET b = a、a = b'はaとbの値を転置しますが、MySQLでは "old a"の値を取っているので "a"代入演算子の右辺。クエリとコード区切りの順序を変更します。 –
@ Michael-sqlbot 'VALUES()'関数は、重複がなければ列に挿入されるはずの値をピックアップし、 'UPDATE'節から新しい値を取得しません。 – Barmar