sql - 我有一个表,我需要根据字段参数更新或插入
问题描述
我花了很多时间研究这个问题并尝试了各种解决方案,但我从来没有为我的具体问题找到合适的解决方案。我是 SQL 新手,其中一些示例也令人困惑。
所以这是我的困境。我有一个设备表,用于跟踪数据库中特定设备的换油情况。该表如下所示:
**id UnitID Posted_On Date_Completed Note OverDueBy**
1 BT-109F 2019-02-04 2019-02-14 Hrs Overdue 23
1 BT-108G 2020-01-17 2020-01-22 Days Overdue 12
1 BT-122K 2020-01-02 2020-01-16 Days Overdue 12
1 BT-109F 2019-02-04 Days Overdue 3
上面的示例记录需要由查询创建或更新。完成日期由技术人员在完成换油后手动输入。
我想要查询做的是,检查特定单元是否有“Date_Completed”字段为空的记录,如果是,则更新“OverDueBy”字段以反映新值。如果指定单元的所有记录都填写了“Date_Completed”字段,则查询应创建一个新记录,该记录将填写除“Date_Completed”字段之外的所有字段。
谁能帮我构建这样的查询?
感谢氏族
解决方案
首先为该列创建一个唯一的部分索引UnitID
:
CREATE UNIQUE INDEX idx_unit ON tablename(UnitID)
WHERE Date_Completed IS NULL;
这样Date_Completed=null
每个UnitID
.
所以像这样的声明:
INSERT INTO tablename(id, UnitID, Posted_On, Date_Completed, Note, OverDueBy)
VALUES (?, 'BT-109F', ?, null, ?, ?)
ON CONFLICT(UnitID) WHERE Date_Completed IS NULL DO UPDATE
SET OverDueBy = ?;
UnitID='BT-109F'
仅当with null
in没有行时才会插入新值Date_Completed
。
但是如果有这样一行,那么它将更新该列OverDueBy
。
我不确定您要插入哪些值或更新后的值是什么,因此请?
用适当的值替换。
推荐阅读
- jquery - JQuery 函数仅适用于第一行
- python - python按字符分割与默认分割
- c++ - 以不同方式旋转立方体
- vue.js - 如何将 vue-awesome-swiper 与 slideTo() 一起使用?
- javascript - 在 Hammer.js 中拖放?
- node.js - 在 Angular 中调用外部应用程序
- php - 如何合并两个多维数组并调整现有值?
- codeigniter - 如何纠正codeigniter中payu支付网关的错误?
- azure - 在 HTML 文件中使用 Azure 函数输出
- html - 我不知道为什么在弹性框中我的图像下方有一个空白区域