Я хотел бы выполнить немного сложную операцию upsert, используя 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(описание) даст мне значение существующей записи (т.е. «существующее описание») в таблице БД. Однако, похоже, это дает мне то, что я пытался вставить, то есть «некоторое описание».
Кто-нибудь знает, как это сделать правильно с помощью SQL. Как лучше всего ссылаться на значение в существующей записи при попытке обновления?