我想使用INSERT ... ON DUPLICATE KEY UPDATE
执行一些复杂的upsert操作。但我无法让它发挥作用。
这就是我想做的事情:
在写出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(描述)会给我DB表中现有记录(即“现有描述”)的值。但是,它似乎给了我试图插入的内容,即“某些描述”。
有人知道如何使用SQL正确地执行此操作。尝试upsert时,在现有记录中引用值的最佳方法是什么?
答案 0 :(得分:5)
简单。不要使用VALUES()
(您已经在使用它来引用check_status
的现有值):
INSERT INTO some_table ('description', 'comment', 'some_unique_key')
VALUES ('some description', 'some comment', 32)
ON DUPLICATE KEY UPDATE
description = IF(check_status = 1, description, 'some description')
comment = IF(check_status = 1, comment, 'some comment')
或者用它来设置新内容而不是重复自己:
INSERT INTO some_table ('description', 'comment', 'some_unique_key')
VALUES ('some description', 'some comment', 32)
ON DUPLICATE KEY UPDATE
description = IF(check_status = 1, description, VALUES(description))
comment = IF(check_status = 1, comment, VALUES(comment))