【发布时间】: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