【发布时间】:2022-06-29 18:20:22
【问题描述】:
甲骨文 18c:
db<>fiddle 带有样本数据。
(1) 我有一个从 XML clob 列中提取 domain 数据的查询:
select
substr(i.name ,0,17) as domain_name,
substr(x.code ,0,13) as domain_code,
substr(x.description,0,35) as domain_description
from
gdb_items_vw i
cross apply xmltable(
'/GPCodedValueDomain2/CodedValues/CodedValue'
passing xmltype(i.definition)
columns
code varchar2(255) path './Code',
description varchar2(255) path './Name'
) x
where
i.name in('ACTIVITY_ATN_1','ACTIVITY_GCSM_1','ACTIVITY_MS_2')
and i.name is not null
DOMAIN_NAME DOMAIN_CODE DOMAIN_DESCRIPTION
----------------- ------------- -----------------------------------
ACTIVITY_ATN_1 RECON_S RECONSTRUCT SIDEWALK
ACTIVITY_ATN_1 RECON_T RECONSTRUCT TRAIL
ACTIVITY_GCSM_1 CON_GCSM CONSTRUCT GCSM
ACTIVITY_GCSM_1 RECON_GCSM RECONSTRUCT_GCSM
ACTIVITY_MS_2 M LIFT AND SWING BRIDGE MAINTENANCE
ACTIVITY_MS_2 C BRIDGE CLEANING
(2) 我有一个查询,它从同一个 XML clob 列中提取 subtype 数据:
select
substr(i.name ,0,18) as object_name,
substr(x.subtype_code ,0,12) as subtype_code,
substr(x.subtype_description,0,35) as subtype_description,
substr(x.subtype_field ,0,15) as subtype_field,
substr(x.subtype_domain ,0,20) as subtype_domain
from
gdb_items_vw i
cross apply xmltable(
'/DETableInfo/Subtypes/Subtype/FieldInfos/SubtypeFieldInfo[FieldName="ACTIVITY"]'
passing xmltype(i.definition)
columns
subtype_code number(38,0) path './../../SubtypeCode',
subtype_description varchar2(255) path './../../SubtypeName',
subtype_field varchar2(255) path './FieldName',
subtype_domain varchar2(255) path './DomainName'
) x
where
i.name is not null
and i.name = 'INFRASTR.BC_EVENTS'
OBJECT_NAME SUBTYPE_CODE SUBTYPE_DESCRIPTION SUBTYPE_FIELD SUBTYPE_DOMAIN
------------------ ------------ ----------------------------------- --------------- --------------------
INFRASTR.BC_EVENTS 0 ACTIVE TRANSPORTATION ACTIVITY ACTIVITY_ATN_1
INFRASTR.BC_EVENTS 1 GEODETIC CONTROL SURVEY MONUMENT ACTIVITY ACTIVITY_GCSM_1
INFRASTR.BC_EVENTS 2 MUNICIPAL STRUCTURES (BRIDGES) ACTIVITY ACTIVITY_MS_2
domains 的 XML 路径与 subtypes 不同。所以这就是为什么我认为我需要为每个单独的查询,即使它们都来自相同的底层视图:gdb_items_vw。
- 域路径:
/GPCodedValueDomain2/CodedValues/CodedValue - 子类型路径:
/DETableInfo/Subtypes/Subtype/FieldInfos/SubtypeFieldInfo[FieldName="ACTIVITY"]
目标:
我想从domain.domain_name加入到subtype.subtype_domain得到如下结果:
DOMAIN_NAME DOMAIN_CODE DOMAIN_DESCRIPTION SUBTYPE_CODE
----------------- ------------- ----------------------------------- ------------
ACTIVITY_ATN_1 RECON_S RECONSTRUCT SIDEWALK 0
ACTIVITY_ATN_1 RECON_T RECONSTRUCT TRAIL 0
ACTIVITY_GCSM_1 CON_GCSM CONSTRUCT GCSM 1
ACTIVITY_GCSM_1 RECON_GCSM RECONSTRUCT_GCSM 1
ACTIVITY_MS_2 M LIFT AND SWING BRIDGE MAINTENANCE 2
ACTIVITY_MS_2 C BRIDGE CLEANING 2
换句话说,我想将subtype_code 列带入domains 查询。
问题:
加入这两个查询的最佳方法是什么?是拥有两个单独查询并通过 SQL left join 将它们连接在一起的唯一选择吗?
【问题讨论】:
标签: sql xml oracle join oracle18c