SQL - 更新(使用相同 table 中的现有行)

SQL - UPDATE (Using existing rows in same table)

我有一个 table(见下文:当前 Table),我需要在其中 UPDATE 第 5 行,因为 ID1 的值已经存在(第 4 行)并且ID3 的值已经存在(第 3 行)。 UPDATE table 有三 (3) 个用例。

附加上下文:在最终状态下,ID1 将只有一个 ID2,但可以有多个 ID3ID3 可以有多个 ID1ID2ID1ID3 是唯一值,如果 ID1 OR ID3 在 table 中不存在,则 ID2 被赋值为 ID1

UPDATE

的用例
  1. 现有行(较小的行 # 和 TIME 值)具有相同的 ID1 价值。使用现有 ID1 值的 ID2 值。
  2. 现有行(较小的行 # 和 TIME 值)具有相同的 ID3 值。使用现有 ID3 值的 ID2 值。
  3. ID1ID3 值都存在(虽然不是同一行)。使用具有最小(最旧)TIME 值的行中的 ID2 值。

当前 Table

Row    ID1    ID2    ID3    TIME  
1      A      A      123    12:01AM  
2      A      A      456    12:05AM  
3      A      A      789    12:10AM  
4      B      A      123    12:15AM  
5      B      B      789    12:20AM  
6      C      C      987    12:25AM

已更新Table

Row    ID1    ID2    ID3    TIME  
1      A      A      123    12:01AM  
2      A      A      456    12:05AM  
3      A      A      789    12:10AM  
4      B      A      123    12:15AM  
5      B      A      789    12:20AM  
6      C      C      987    12:25AM

我认为您的条件简化为从匹配的 id1id3 中获取最早的 id2:

update t
    set id2 = tt.new_id
    from (select t.*,
                 (select t2.id2
                  from t t2
                  where t2.id1 = t.id1 or t2.id3 = t.id3
                 ) as new_id
          from t
         ) tt
    where t.id1 = tt.id1;