如何编写Oracle查询实现两表关联输出对应项名称
问题描述
现有两张业务表:
- Table_1:存储序号与两类项ID的对应关系,表结构及测试数据:
Sr_no Item_1_id Item_2_id --------------------------------- 1 3 2 2 2 1 3 1 3
- Table_2:存储项ID与项名称的映射关系,表结构及测试数据:
Item_id Item_Name ------------------------- 1 Key Board 2 Monitor 3 CPU
需要查询输出每条记录的序号、Item_1_id对应的项名称、Item_2_id对应的项名称,期望输出结果:
Sr_no Item_1_Name Item_2_Name --------------------------------- 1 CPU Monitor 2 Monitor Key Board 3 Key Board CPU
实现SQL
核心逻辑是对Table_2做两次关联,分别匹配两个ID字段,用表别名区分两次关联的映射表,语句如下:
SELECT t1.Sr_no, t2a.Item_Name AS Item_1_Name, t2b.Item_Name AS Item_2_Name FROM Table_1 t1 -- 第一次关联Table_2,匹配Item_1_id对应的名称 LEFT JOIN Table_2 t2a ON t1.Item_1_id = t2a.Item_id -- 第二次关联Table_2,匹配Item_2_id对应的名称 LEFT JOIN Table_2 t2b ON t1.Item_2_id = t2b.Item_id ORDER BY t1.Sr_no;
说明:如果业务上能保证Table_1中所有Item_1_id、Item_2_id都能在Table_2中找到匹配记录,可以把
LEFT JOIN替换为INNER JOIN,查询效率会更高。
内容的提问来源于stack exchange,提问作者Ijaz Hussain
相关产品推荐
相关产品推荐

