Oracle两表左连接时关联第三表取值的SQL构造方法
解决方案:关联elc_statuses表获取工单状态名称
要将视图中wo_status的外键值替换为对应的状态名称/描述,只需在现有左连接逻辑基础上新增与elc_statuses表的关联,无需复杂子查询。以下是修改后的完整Oracle SQL代码:
CREATE OR REPLACE VIEW VW_EQ_HISTORY ( id, tag, original_wo, wo_status, -- 保留原字段名,实际返回状态显示值 wo_task_code, wo_task_name, -- 其他字段... ) AS SELECT a.wmm_eqhist_id id, b.wmt_tag_name tag, c.wmm_wo_code original_wo, s.status_name wo_status, -- 替换为状态表中的名称字段 d.wmm_wotask_id wo_task_code, -- 修正原代码拼写错误(wo_taske_code) d.wmm_wotask_name wo_task_name, -- 建议替换为实际任务名字段,而非ID -- 其他字段... FROM WMM_EQUIPHISTORY a LEFT JOIN wmt_tag b ON a.wmt_tag_id = b.wmt_tag_id LEFT JOIN wmm_workorder c ON a.wmm_wo_id = c.wmm_wo_id LEFT JOIN elc_statuses s ON c.elc_status_id = s.elc_status_id -- 新增状态表左连接 LEFT JOIN wmm_woitem d ON a.wmm_woitem_id = d.wmm_woitem_id -- 其他关联表... WHERE a.wmm_eqhist_createddate >= TO_DATE('01/JAN/2013', 'dd/mon/yyyy') WITH READ ONLY CONSTRAINT vw_eq_history / GRANT SELECT ON vw_eq_history TO pbiuser;
关键修改说明:
- 新增左连接:通过
LEFT JOIN elc_statuses s ON c.elc_status_id = s.elc_status_id关联状态表,确保即使工单无状态ID时,视图仍能正常返回数据(符合左连接的非强制匹配特性)。 - 替换字段值:将原查询中的
c.elc_status_id wo_status替换为s.status_name wo_status,请根据elc_statuses表的实际字段调整(例如状态描述可能存于status_desc字段)。 - 修正细节问题:原代码中
wo_taske_code为拼写错误,改为wo_task_code;同时建议将wo_task_name对应的d.wmm_wotask_id替换为实际任务名称字段,避免返回ID而非业务名称。
内容的提问来源于stack exchange,提问作者Sigur
相关产品推荐
相关产品推荐

