oracle 如何在层次结构树表单中设置父子关系

y3bcpkx1  于 2023-06-22  发布在  Oracle
关注(0)|答案(1)|浏览(129)

我有一个ORACLE表数据,其中数据表示父子关系。但在我的表中没有这样的关系。那么,我如何在不存在关系的表中设置父子关系呢?
下面给出我的表中的一些示例数据以供理解。
| ID|代码|名称|父ID|
| - -----|- -----|- -----|- -----|
| 5个|零零五|根||
| 十五|0015|资产||
| 二十五|0025|现金和银行余额||
| 三十五|0035|现金在手||
| 四十五|0045|现金在保险库||
| 五十五|零零五|库存现金(金库)||
| 六十|0060|库存现金FCY(金库)。||
| 七十五|0075| ATM机上的现金||
| 八十五|0085| ATM机上的现金||
| 一百二十|0120|与孟加拉国银行达成协议||
| 一百三十|0130| BANGLADESH BANK LCY||
| 一百三十五|一三五|BAL.与BANGLADESH FCY||
从上面的表中,ROOT表示我的表的数据根。在它的ASSETS下表示ROOT的子。在ASSETS下,CASH AND BANK BALANCE是子节点。在CASH AND BANK BALANCE下,CASH IN HANDBAL WITH BANGLADESH BANK是子节点。CASH IN VAULTCASH AT ATM (0075)CASH IN HAND的子节点。CASH IN HAND LCY (VAULT)CASH IN HAND FCY (VAULT).CASH IN VAULT的子节点。类似地,对于CASH AT ATMBAL WITH BANGLADESH BANKCASH AT ATM (0085)BAL WITH BANGLADESH BANK LCY以及BAL. WITH BANGLADESH FCY分别是子节点。
那么从这些数据中,我如何创建父子关系数据。
我的最终数据表将如下所示:
| ID|代码|名称|父ID|
| - -----|- -----|- -----|- -----|
| 5个|零零五|根||
| 十五|0015|资产|5个|
| 二十五|0025|现金和银行余额|十五|
| 三十五|0035|现金在手|二十五|
| 四十五|0045|现金在保险库|三十五|
| 五十五|零零五|库存现金(金库)|四十五|
| 六十|0060|库存现金FCY(金库)。|四十五|
| 七十五|0075| ATM机上的现金|三十五|
| 八十五|0085| ATM机上的现金|七十五|
| 一百二十|0120|与孟加拉国银行达成协议|二十五|
| 一百三十|0130| BANGLADESH BANK LCY|一百二十|
| 一百三十五|一三五|BAL.与BANGLADESH FCY|一百二十|

91zkwejq

91zkwejq1#

没有一个明显的自动化方法(因为你有不同代码的重复名称);而是手动指定父子关系:

MERGE INTO table_name dst
USING (
  SELECT  15 AS id, 5 AS parent_id FROM DUAL UNION ALL
  SELECT  25,  15 FROM DUAL UNION ALL
  SELECT  35,  25 FROM DUAL UNION ALL
  SELECT  45,  35 FROM DUAL UNION ALL
  SELECT  55,  45 FROM DUAL UNION ALL
  SELECT  60,  45 FROM DUAL UNION ALL
  SELECT  75,  35 FROM DUAL UNION ALL
  SELECT  85,  75 FROM DUAL UNION ALL
  SELECT 120,  25 FROM DUAL UNION ALL
  SELECT 130, 120 FROM DUAL UNION ALL
  SELECT 135, 120 FROM DUAL
) src
ON (src.id = dst.id)
WHEN MATCHED THEN
  UPDATE SET parent_id = src.parent_id;

相关问题