我有一个表(请参阅下面的“当前表”),其中我需要UPDATE
Row# 5,因为ID1的值已经存在(Row# 4),ID3
的值已经存在(Row# 3)。有三(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
更新表
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
发布于 2017-11-14 11:24:20
我认为您的条件简化为从匹配的id1
或id3
获得最早的id1
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;
https://stackoverflow.com/questions/47292569
复制相似问题