oracle 如何构建一个update语句,用包含多个列匹配数据的记录来填充缺少的数据?

qncylg1j  于 2023-01-25  发布在  Oracle
关注(0)|答案(1)|浏览(126)

我在表的2列中有数千条记录缺少数据。我希望通过基于其他列查找匹配项,使用具有该数据的记录填充这2列。因此,请使用匹配数据填充这些缺少的值。
样本数据:
| 主要标识|主要_名称|父代名称|子级名称|父代标识|父标识2|子项标识|
| - ------|- ------|- ------|- ------|- ------|- ------|- ------|
| 小行星123456|XYZ_补偿|xyz_组件_pl|xyz_像素|九八七|小行星5435|20 - 2|
| 零|零|xyz_组件_pl|xyz_pl_2|九八七|小行星5435|二十比一|
| 小行星123457|ABC_组件|abc_组件_pl|abc_pl|七六五|小行星5843|三十四比一|
| 小行星123457|ABC_组件|abc_组件_pl|abc_pl_2|七六五|小行星5843|三十四至九|
| 零|零|abc_组件_pl|abc计划3|七六五|小行星5843|三十四至七|
| 零|零|abc_组件_pl|abc计划语言4|七六五|小行星5843|三十四至六|
空的maj_id和maj_name是我想要用具有匹配parent_name、parent_id和parent_id_2的列中的maj_id和maj_name更新的内容。我能够使用类似下面的查询来标识要更新的记录,但不确定如何从中创建update语句。
选择T.父项标识、T.主项名称
来自test_table t内部连接(从test_table中选择父代ID、父代名称、父代ID_2,按父代ID、父代名称、parent_id_2具有sum(如果maj_name不为空,则为1,否则为0)〉= 1和sum(如果主名称为空,则为1,否则为0)〉= 1)D on t.父标识= d.父标识和t.父名称= d.父名称和t.父标识_2 = d.父标识_2按父排序id,主要名称ASC;

9jyewag0

9jyewag01#

MERGE INTO test_table
USING (SELECT b.rowid row_id,
              a.maj_id,
              a.maj_name
         FROM (SELECT parent_id,
                      parent_name,
                      parent_id_2,
                      maj_id,
                      maj_name,
                      ROW_NUMBER() OVER (PARTITION BY parent_id,parent_name,parent_id_2 ORDER BY CASE WHEN (maj_id IS NOT NULL) THEN 1 ELSE 0 END DESC, maj_id DESC) seq
                 FROM test_table) a,
               test_table b
         WHERE a.seq = 1
           AND a.parent_id = b.parent_id
           AND a.parent_name = b.parent_name
           AND a.parent_id_2 = b.parent_id_2
           AND b.maj_id IS NULL) src
ON (src.row_id = test_table.ROWID)
WHEN MATCHED THEN UPDATE SET maj_id = src.maj_id, maj_name = src.maj_name

相关问题