首页 > 解决方案 > Oracle 删除表中的重复行并使用另一个表中的值更新行

问题描述

在我的 associates 表中,我有 4,978 个人,至少有 1 个重复。

asscssn     | count(*)
---------     --------
123456789      8
987654321      5
234567890      5

一个人的每个副本在 associates 表中都有一个唯一的 id (asscid)。

asscid | asscssn
------  -------
53492    987654321
53365    987654321
53364    987654321
52104    987654321
50185    987654321

我的案例表有一个案例与每个 asscid 相关联

docketnumber | asscid
-----------    -------
2010JV0000     53492
2010JV1111     53365
2010JV2222     53364
2010JV3333     52104
2010JV4444     50185

我想获取每个有重复项的人,从 associates 表中获取该人的最新 asscid 并更新 case 表。结果将是:

  docketnumber | asscid
    -----------    -------
    2010JV0000     53492
    2010JV1111     53492
    2010JV2222     53492
    2010JV3333     53492
    2010JV4444     53492

标签: sqloraclejoinsql-updatewindow-functions

解决方案


cross join获取最新版本后即可使用asscid。这是演示

select
    docketnumber,
    q.asscid
from table2
cross join
(
  select
    max(asscid) as asscid
  from table1
) q

输出:

| docketnumber | asscid |
| ------------ | ------ |
| 2010JV0000   | 53492  |
| 2010JV1111   | 53492  |
| 2010JV2222   | 53492  |
| 2010JV3333   | 53492  |
| 2010JV4444   | 53492  |

推荐阅读