1

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

附加上下文:在最终状态下,ID1将只有一个ID2,但可以有多个ID3ID3可以有很多ID1and ID2ID1并且ID3是唯一值,如果表中不存在ID1OR ,则分配 的值。 ID3ID2ID1

用例UPDATE

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

当前表

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

更新表

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
4

1 回答 1

2

id2我认为您的条件简化为从匹配id1或中获取最早的条件id3

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;
于 2017-11-14T19:24:20.913 回答