首页 > 解决方案 > 如何通过检查同一表中另一条记录中的值来更新记录

问题描述

我有一张桌子:

ID      DATE            RANGE       STATUS
--------------------------------------------
123     30-SEP-2019     000         C
123     30-SEP-2019     001         NULL
345     25-SEP-2019     000         C
345     30-SEP-2019     001         NULL
567     30-SEP-2019     000         C
567     30-SEP-2019     001         NULL
789     27-SEP-2019     000         C
789     30-SEP-2019     001         NULL

具有相同 ID(例如 123)的记录被视为具有不同 RANGE 的相同记录。我需要将 001 RANGE 记录的状态更新为 Y,其中 000 RANGE 记录的日期应为 2019 年 9 月 30 日。

前任。更新查询应该将 ID - '123' 和 RANGE - '001' 的记录的状态更新为'Y',因为对于 ID - '123' 和 RANGE - '000' 记录的 DATE 是'30-SEP- 2019 年'。它还应该使用 ID - 567 更新 001 RANGE 记录的状态。

它不应更新 ID 789 和 345 的 001 RANGE 状态,因为那些 000 RANGE 记录的 DATE 不等于 30-SEP-2019。

我怎样才能做到这一点?

标签: sqlsql-serversybase

解决方案


想到一个带有过滤的相关子查询:

update t
    set status = (select t2.status
                  from t t2
                  where t2.id = t.id and t2.range = '000'
                 )
    where date = '2019-09-30' and range = '001';

推荐阅读