首页 > 解决方案 > 我有一个表,我需要根据字段参数更新或插入

问题描述

我花了很多时间研究这个问题并尝试了各种解决方案,但我从来没有为我的具体问题找到合适的解决方案。我是 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”字段之外的所有字段。

谁能帮我构建这样的查询?

感谢氏族

标签: sqlsqlite

解决方案


首先为该列创建一个唯一的部分索引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 nullin没有行时才会插入新值Date_Completed
但是如果有这样一行,那么它将更新该列OverDueBy
我不确定您要插入哪些值或更新后的值是什么,因此请?用适当的值替换。


推荐阅读