我正在做一个INSERT ... ON DUPLICATE KEY UPDATE,但我需要更新的部分是有条件的,只做更新,如果一些额外的条件已经改变.

但是,UPDATE上不允许使用WHERE.有什么解决办法吗?

我不能同时执行插入/更新/ Select 操作,因为这需要在复制过程中进行.

推荐答案

我建议你用IF()来做这件事.

参考:conditional-duplicate-key-updates-with-mysql

INSERT INTO daily_events (created_on, last_event_id, last_event_created_at)
  VALUES ('2010-01-19', 23, '2010-01-19 10:23:11')
ON DUPLICATE KEY UPDATE
  last_event_id = IF(last_event_created_at < VALUES(last_event_created_at), VALUES(last_event_id), last_event_id);

Mysql相关问答推荐

mysql使用LIKE查找二进制字段有问题

左联接重复问题

如何防止程序中计数器出错

使用触发器markdown 10%

如何合并有多行的json列

返回包含某一列的分组最大值的行,说明列中的重复值

无法确定查询逻辑

MySQL 计数出现的百分比大于

将 GORM 与自定义连接表和外键结合使用

如何本地化 MySQL 表中的实体?

MySQL如何将字符串列表与子查询进行比较

获取 TEXT 类型行的百分比

有人可以帮我用 R 编程解决这个问题吗?

当查询 MySQL 的 goroutine 过多时,Go 会出现panic

创建表时我的 SQL 语句有什么问题

将 wordpress 自定义字段转换为单个数组

了解 SQL 中的元组语法

用两个新列制作表格,按偶数或奇数对另一列进行分类,并将一个类别中的所有偶数和奇数相加

PHP MySQLI 防止 SQL 注入

WHERE 子句中的条件顺序会影响 MySQL 性能吗?