【问题标题】:MERGE / UPDATE Query for ORACLE SQL DEVELOPERORACLE SQL DEVELOPER 的 MERGE / UPDATE 查询
【发布时间】:2021-04-12 04:32:17
【问题描述】:

我有两个不同的表,table1 和 table2,如下所示

表1

LA_ID ADDRESS CITY STATE
572 A1 C1 S1
300 A1 C1 S1
978 A1 C1 S1
082 A2 C2 S2
026 A2 C2 S2
093 A2 C2 S2

表2

LA_ID
572
572
300
300
978
978
978
978
082
082
082
026
026
093

我想更新 table2 LA_ID 的样子

LA_ID
572
572
572
572
572
572
572
572
082
082
082
082
082
082

基本上将table2的LA_ID更新为table1的LA_ID,其中ADDRESS、CITY和state是一样的。

我试过了

SET LA_ID = (SELECT new_LA_ID from (
(Select min(LA_ID) over
(partition by ADDRESS, city, state) as new_LA_ID,
LA_ID old_LA_ID
from table2 )) src
where src.old_LA_ID = tgt.LA_ID )
where tgt.LA_ID in (Select LA_ID old_LA_ID
from table2 
);





【问题讨论】:

  • 为什么是 572 而不是 300 或 978?
  • 可以是其中任何一个。我试过 min(LA_ID) 所以它用 first_row 的 LA_ID 更新,这里是 572 和 082

标签: sql oracle sql-update


【解决方案1】:

如果您愿意只使用最小值或最大值,您可以简单地使用update

update table_2 t2
    set la_id = (select min(t1.la_id)
                 from table_1 t1 join
                      table_1 t12
                      on t1.state = t12.state and t1.city = t12.city and t1.address = t12.address
                 where t12.la_id = t2.la_id
                )
    where la_id <> (select min(t1.la_id)
                    from table_1 t1 join
                         table_1 t12
                         on t1.state = t12.state and t1.city = t12.city and t1.address = t12.address
                    where t12.la_id = t2.la_id
                   );

我不确定当存在重复项时,您是如何为您想要的特定 ID 选择 572082。这将选择300026

【讨论】:

  • 问题是你用作t2的table2只有一列LA_ID,所以它不能与t1的州、城市、地址匹配
  • 你能解释一下table_1 t12 join部分吗
  • @RishuTripathi 。 . .子查询的目的是获取与外部 id 匹配的地址上的最低 id。这使用自联接。我不确定Oracle中是否有另一种方法。
  • 谢谢@Gordon Linoff!这很有帮助。
  • @RishuTripathi 。 . .如果这回答了您的问题,您可以接受答案。
猜你喜欢
  • 2013-06-20
  • 2021-03-31
  • 2012-12-30
  • 1970-01-01
  • 1970-01-01
  • 2012-06-14
  • 1970-01-01
  • 2022-10-13
  • 1970-01-01
相关资源
最近更新 更多