Oracle SQL中如何关联两张表获取含R_NAME和M_NAME的结果?
关联两张表获取多列名称的解决方案
表结构与需求
表A
| ID | PLACE | R_ID | M_ID |
|---|---|---|---|
| 1 | PLACE_1 | 51 | 53 |
| 2 | PLACE_2 | 52 | 54 |
表B
| S_ID | NAME |
|---|---|
| 51 | A |
| 52 | B |
| 53 | C |
| 54 | D |
期望输出表
| ID | PLACE | R_NAME | M_NAME |
|---|---|---|---|
| 1 | PLACE_1 | A | C |
| 2 | PLACE_2 | B | D |
已尝试的查询语句
SELECT id, place, name as r_name FROM table_a LEFT JOIN table_b ON r_id = s_id
当前查询结果
| ID | PLACE | R_NAME |
|---|---|---|
| 1 | PLACE_1 | A |
| 2 | PLACE_2 | B |
解决方案
只需两次关联表B,分别通过R_ID和M_ID与表B的S_ID匹配,同时给表B设置不同别名区分两次关联,避免字段冲突。
正确SQL语句如下:
SELECT a.id, a.place, b_r.name AS r_name, b_m.name AS m_name FROM table_a a LEFT JOIN table_b b_r ON a.r_id = b_r.s_id LEFT JOIN table_b b_m ON a.m_id = b_m.s_id
说明
- 给表A设别名
a,两次关联的表B分别设别名b_r(对应R_ID关联)和b_m(对应M_ID关联),明确区分不同关联的name字段。 - 使用
LEFT JOIN可保留表A中所有记录,即使R_ID/M_ID在表B无匹配值,对应字段会显示NULL;若仅需保留匹配记录,可替换为INNER JOIN。
内容的提问来源于stack exchange,提问作者PieterPrr
相关产品推荐
相关产品推荐

