如何使用JOIN关联两表,将l_id映射到g_id/p_id并获取对应名称
基于JOIN的SQL查询方案
需求说明
从table2关联table1,分别将g_id、p_id对应table1中的name字段取出,命名为g_name和p_name,输出指定格式结果,且需支持后续关联更多表。
表结构与数据
table1(ID-名称映射表):
e_id, name, l_id 123 dog 789 123 cat 543 123 owl 602
table2(业务数据表):
f_id, e_id, g_id, p_id 098 123 789 543 099 123 602 602 100 123 543 543 101 123 543 789 102 123 789 789
最终SQL查询
SELECT t2.e_id, g_t.name AS g_name, t2.g_id, p_t.name AS p_name, t2.p_id FROM table2 t2 -- 关联table1获取g_id对应的名称 JOIN table1 g_t ON t2.g_id = g_t.l_id AND t2.e_id = g_t.e_id -- 再次关联table1获取p_id对应的名称 JOIN table1 p_t ON t2.p_id = p_t.l_id AND t2.e_id = p_t.e_id ORDER BY t2.f_id;
查询结果
e_id, g_name, g_id, p_name, p_id 123 dog 789 cat 543 123 owl 602 owl 602 123 cat 543 cat 543 123 cat 543 dog 789 123 dog 789 dog 789
方案解释
- 对
table1做两次JOIN操作,用g_t和p_t作为别名区分,避免表名冲突 - 关联条件同时匹配
e_id与对应ID字段(g_id/p_id和l_id),确保映射关系准确 - 该结构具备扩展性,后续可直接在FROM/JOIN子句中添加其他关联表,不受UNION类方案的结构限制
内容的提问来源于stack exchange,提问作者Ramesh Raj
相关产品推荐
相关产品推荐

