を使用して少し複雑なアップサート操作を実行したいと思いINSERT ... ON DUPLICATE KEY UPDATE
ます。しかし、私はそれを機能させることができませんでした。
これが私がやりたいことです:
- レコードを挿入してみてください。挿入が成功した場合、それは良いことです。
- そのレコードが存在する場合は、レコードを更新します。
- レコードを更新するときに、check_statusフィールドが1の場合、説明とコメントフィールドを残します。
- レコードを更新するときは、check_statusフィールドが0になり、説明とコメントフィールドも更新されます。
SQLを書き出す前に、some_tableに次のレコードがあると仮定しましょう。
column name | val
-----------------+-------------------------
some_unique_key | 32
description | existing description
comment | existing comment
check_status | 1
したがって、上記の操作を実行するために、次のようにSQLを使用しました。
INSERT INTO some_table ('description', 'comment', 'some_unique_key')
VALUES ('some description', 'some comment', 32)
ON DUPLICATE KEY UPDATE
description = IF(check_status = 1, VALUES(description), 'some description')
comment = IF(check_status = 1, VALUES(comment), 'some comment')
VALUES(description)は、DBテーブル内の既存のレコード(つまり、「既存の説明」)の値を提供すると思いました。しかし、それは私が挿入しようとしたもの、すなわち「いくつかの説明」を私に与えているようです。
SQLを使用してこれを正しく行う方法を知っている人はいますか?アップサートを試みるときに既存のレコードの値を参照するための最良の方法は何ですか?