sql - 联接不存在公共字段并基于 ID 列的表
问题描述
这个问题似乎很难说,但是在解释了我的情况之后应该很容易理解。我有两个表:一个称为 INSTRUCTORS 保存讲师数据,另一个称为 LIST_OPTION_ITEM 保存存储在 INSTRUCTORS 表中的不同 ID 列的 ID 值。第三个可能很重要的表是 LIST_OPTION_TYPE,它包含 INSTRUCTORS 中任何 ID 列的 ID。也许通过显示示例数据和我想要的输出来解释会更容易。
讲师
RANK_ID | SPECIALTY_ID | DUTY_TITLE_ID | SERVICE_BRANCH_ID | STATUS_ID | UNIT_ID | OFFICE_SYMBOL_ID |
---|---|---|---|---|---|---|
1354 | 319 | 931 | 2604 | 1378 | 1406 | 1429 |
LIST_OPTION_ITEM
OPTION_ITEM_ID | OPTION_TYPE_ID | ITEM_VALUE |
---|---|---|
1354 | 22 | CAPT |
319 | 20 | CBRN 创伤护士 |
931 | 21 | IDMT-中队医疗元素 |
2604 | 128 | 46N 护士 |
1378 | 23 | 美国 |
1406 | 24 | 警卫 |
1429 | 126 | CERFP |
LIST_OPTION_TYPE
OPTION_TYPE_ID | OPTION_TYPE |
---|---|
20 | 专业 |
21 | 职务_职称 |
22 | 秩 |
23 | 服务_分公司 |
24 | 地位 |
126 | 单元 |
128 | Office_Symbol |
需要注意的是,我不能加入 INSTRUCTORS 和 LIST_OPTION_ITEM,因为没有公共列。但是,LIST_OPTION_ITEM 和 LIST_OPTION_TYPE 可以加入OPTION_TYPE_ID
。我想要的SELECT
查询输出:
秩 | 专业 | 职称 | 服务分公司 | 地位 | 单元 | 办公室符号 |
---|---|---|---|---|---|---|
CAPT | CBRN 创伤护士 | IDMT-中队医疗元素 | 46N 护士 | 美国 | 警卫 | CERFP |
我尝试了一些解决方案,但无法提出任何建议。我需要交叉连接还是什么?帮助将不胜感激。
解决方案
我尝试使用 Pivot 和 unpivot 函数
下面是示例sql:
with inst as (select inst_id, col, col_id
from (select rownum as inst_id, a.* from instructor a)
unpivot
(col_id for col in (status_id as 'STATUS',rank_id as 'RANK',specialty_id as 'SPECIALTY',duty_title_id as 'DUTY_TITLE')
))
select * from
(select inst_id,col,item_value from inst,
(select a.option_type,b.option_item_id,b.item_value from LIST_OPTION_TYPE a, list_option_id b
where a.option_type_id = b.option_type_id) opt
where inst.col = upper(option_type)
and option_item_id = col_id)
pivot
(max(item_value)
for col in ('STATUS','RANK','SPECIALTY','DUTY_TITLE')
) order by inst_id;
这将提供所需的输出