mysql - Mysql 如果不可用则插入,如果部分可用则更新,如果完全可用则退出
问题描述
我需要根据是否找到、部分找到或根本不可用这些值来采取适当的措施。
这是我的桌子:
id. emp_code. ot_date. ot_hours
1 123 2021-05-01 3
2 567 2021-05-01 1
现在我有这3个数据:
数据 #1 emp_code:123 ot_date:2021-05-01 ot_hours:3
数据 #2 emp_code:123 ot_date:2021-05-02 ot_hours:3
数据 #3 emp_code:567 ot_date:2021-05-01 ot_hours:2.5
这是我决定和采取行动的逻辑:
select emp_code, ot_date where values are (emp_code, ot_date)
from ot_forecast
if it exist
select emp_code, ot_dat,ot_hours where values are (emp_code, ot_date, ot_hours)
from ot_forecast
if exist then exit
else update values (emp_code, ot_date, ot_hours)
else insert values (emp_code, ot_date, ot_hours)
根据我的逻辑,数据1将被跳过,数据2将被插入,数据3将被更新
问题是,我无法弄清楚如何将其放入代码中。我已经卡在第一行了。
希望有人可以指导我。谢谢
解决方案
如果您创建emp_code
,ot_date
作为唯一(或主(id
似乎毫无意义))键,则启用INSERT ON DUPLICATE KEY UPDATE。
CREATE UNIQUE INDEX ot_forecast ( emp_code, ot_date)
您的查询将变为:
INSERT INTO ot_forecast
SET emp_code = xxx, ot_date= yyyy, ot_hours = zzzz
ON DUPLICATE KEY UPDATE ot_hours = zzzz
您作为选择的第一个案例将导致更新,也许这没关系,因为它实际上是一个无操作。
如果你在哪里使用 MariaDB,你也可以使用INSERT RETURNING:
INSERT INTO ot_forecast
SET emp_code = xxx, ot_date= yyyy, ot_hours = zzzz
ON DUPLICATE KEY UPDATE ot_hours = zzzz
RETURNING emp_code, ot_date, ot_hours
推荐阅读
- javascript - JavaScript 匹配逗号分隔字符串中的多个值
- swift - 在框架的顶部和底部模糊 UiImageView
- windows - How does PowerShell handle redirection compared to Command Prompt?
- tomcat9 - 无法使用 Tomcat 在 localhost 中获取 Hello World
- cassandra - 将多个 SSTable 离线压缩/合并为一个
- javascript - 从文件路径中检索图像并将其编码为 Base64
- r - 通过 RStudio 中的 YAML 标头的默认编织目录?
- reactjs - React Hooks - 如何测试全球供应商的变化
- nginx - 在 https 上提供主域内容的子域
- r - 使用循环从 R 中的大数据框中删除停用词需要太多时间