SQL - 更新(使用相同 table 中的现有行)
SQL - UPDATE (Using existing rows in same table)
我有一个 table(见下文:当前 Table),我需要在其中 UPDATE
第 5 行,因为 ID1 的值已经存在(第 4 行)并且ID3
的值已经存在(第 3 行)。 UPDATE
table 有三 (3) 个用例。
附加上下文:在最终状态下,ID1
将只有一个 ID2
,但可以有多个 ID3
。 ID3
可以有多个 ID1
和 ID2
。 ID1
和 ID3
是唯一值,如果 ID1
OR ID3
在 table 中不存在,则 ID2
被赋值为 ID1
。
UPDATE
的用例
- 现有行(较小的行 # 和
TIME
值)具有相同的 ID1
价值。使用现有 ID1
值的 ID2
值。
- 现有行(较小的行 # 和
TIME
值)具有相同的 ID3
值。使用现有 ID3
值的 ID2
值。
ID1
和 ID3
值都存在(虽然不是同一行)。使用具有最小(最旧)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
我认为您的条件简化为从匹配的 id1
或 id3
中获取最早的 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;
我有一个 table(见下文:当前 Table),我需要在其中 UPDATE
第 5 行,因为 ID1 的值已经存在(第 4 行)并且ID3
的值已经存在(第 3 行)。 UPDATE
table 有三 (3) 个用例。
附加上下文:在最终状态下,ID1
将只有一个 ID2
,但可以有多个 ID3
。 ID3
可以有多个 ID1
和 ID2
。 ID1
和 ID3
是唯一值,如果 ID1
OR ID3
在 table 中不存在,则 ID2
被赋值为 ID1
。
UPDATE
- 现有行(较小的行 # 和
TIME
值)具有相同的ID1
价值。使用现有ID1
值的ID2
值。 - 现有行(较小的行 # 和
TIME
值)具有相同的ID3
值。使用现有ID3
值的ID2
值。 ID1
和ID3
值都存在(虽然不是同一行)。使用具有最小(最旧)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
我认为您的条件简化为从匹配的 id1
或 id3
中获取最早的 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;