mysql - 在具有 where 条件的重复键上
问题描述
我正在尝试WHERE
对INSERT INTO
包含ON DUPLICATE KEY
. 下面是我想要实现的一个示例。
这条 SQL 语句被第三方软件调用,我们想根据数值排除一些导出,在本例中为 2。所以,当 X != Y 执行 INSERT 时,如果 X == Y,则不要。
INSERT INTO satellites (name, intname) VALUES ('%SATELLITE.NAME%','%SATELLITE.INTNAME%') ON DUPLICATE KEY UPDATE name='%SATELLITE.NAME%',intname='%SATELLITE.INTNAME%' WHERE '%SATELLITE.NAME%' != 2;
解决方案
使用SELECT
查询而不是VALUES
. 然后你可以添加一个条件来忽略名字
INSERT INTO satellites (name, intname)
SELECT '%SATELLITE.NAME%' AS name, '%SATELLITE.INTNAME%'
FROM DUAL
HAVING name != 2
ON DUPLICATE KEY UPDATE name = VALUES(name), intname = VALUES(intname)
请注意,在该ON DUPLICATE KEY UPDATE
子句中,您不需要指定对唯一键列的分配,因为它不会改变(因为那是重复的)。但是我不知道哪个是唯一键,所以我没有删除它。
DUAL
当您只选择文字值时,它是表名的占位符。
推荐阅读
- javascript - 如何使用下拉值过滤django中显示的元素列表
- c++ - 如何删除双向链表中间和末尾的节点
- flask - 手动启动时,守护进程 Celery 工人在 1 项任务上抛出错误,但工人没有
- c++ - Visual C++ 测试开箱即用项目中的错误
- java - 在活动之间发送图像 - Android (Kotlin/Java)
- kubernetes - 尝试使用 Ingress 重写 Grafana 的 url
- testing - 如何在 Dart/Flutter 中测试 void 静态方法?
- django - 如何从 Django ModelForm 获取具有偏移量的日期时间对象
- asp.net - ValidationExpression 后文件上传不起作用
- unreal-engine4 - 如何在鼠标悬停时生成 Actor 并在几秒钟后自行销毁?