首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >SQL - UPDATE (使用同一表中的现有行)

SQL - UPDATE (使用同一表中的现有行)
EN

Stack Overflow用户
提问于 2017-11-14 10:09:20
回答 1查看 2.5K关注 0票数 1

我有一个表(请参阅下面的“当前表”),其中我需要UPDATE Row# 5,因为ID1的值已经存在(Row# 4),ID3的值已经存在(Row# 3)。有三(3)个用例可用于UPDATE表。

附加上下文:在最终状态下,ID1将只有一个ID2,但可以有多个ID3ID3可以有许多ID1ID2ID1ID3是唯一的值,当且仅当表中不存在ID1ID3,则ID2被赋予ID1的值。

UPDATE用例

  1. 现有行(较小的行#和TIME值)具有相同的ID1值。对现有的ID2值使用ID1值。
  2. 现有行(较小的行#和TIME值)具有相同的ID3值。对现有的ID2值使用ID3值。
  3. ID1ID3值都存在(但不是相同的行)。将行中的ID2值与最小(最老的) TIME值一起使用。

当前表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

更新表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-14 11:24:20

我认为您的条件简化为从匹配的id1id3获得最早的id1

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47292569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文