我有一个表(见下面:当前表),我需要UPDATE
第5行,因为ID1的值已经存在(第4行),ID3
的值已经存在(第3行)。有{(1)}个表的三(3)个用例。
附加上下文:在最终状态中,UPDATE
将只有一个ID1
,但可以有多个ID2
。 ID3
可以有多个ID3
和ID1
。 ID2
和ID1
是唯一值,如果表中不存在ID3
或ID1
,则会为ID3
分配值ID2
。
ID1
UPDATE
值)具有相同的TIME
值。使用现有ID1
值的ID2
值。ID1
值)具有相同的TIME
值。使用现有ID3
值的ID2
值。ID3
和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
答案 0 :(得分:1)
我认为您的条件可以简化为从匹配的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;