连接两个表 - Oracle SQL

问题描述 投票:0回答:3

我有两张桌子,我想加入他们。下面是表格示例和结果表:

表A

ID 地点 R_ID M_ID
1 PLACE_1 51 53
2 PLACE_2 52 54

B桌

S_ID 姓名
51 A
52
53 C
54 D

输出表

ID 地点 R_NAME M_NAME
1 PLACE_1 A C
2 PLACE_2 D

我试过查询:

SELECT
    id,
    place,
    name as r_name
FROM
    table_a 
    LEFT JOIN table_b ON r_id = s_id

查询结果

ID 地点 R_NAME
1 PLACE_1 A
2 PLACE_2

但是我不知道如何加入下一专栏m_name.

left-join oracle-sqldeveloper
3个回答
0
投票

两次加入同一张表,使用表别名来区分两者:

SELECT id,
       place,
       r.name as r_name,
       m.name as m_name
FROM   table_a a
       LEFT JOIN table_b r ON a.r_id = r.s_id
       LEFT JOIN table_b m ON a.m_id = m.s_id

其中,对于示例数据:

CREATE TABLE Table_A (ID, PLACE, R_ID, M_ID) AS
SELECT 1, 'PLACE_1', 51, 53 FROM DUAL UNION ALL
SELECT 2, 'PLACE_2', 52, 54 FROM DUAL;

CREATE TABLE Table_B (S_ID, NAME) AS
SELECT 51, 'A' FROM DUAL UNION ALL
SELECT 52, 'B' FROM DUAL UNION ALL
SELECT 53, 'C' FROM DUAL UNION ALL
SELECT 54, 'D' FROM DUAL;

输出:

ID 地点 R_NAME M_NAME
1 PLACE_1 A C
2 PLACE_2 D

小提琴


0
投票

你可以这样做:

with cte_r as ( 
  SELECT a.ID, a.PLACE, b.NAME
  FROM tableA a
  INNER JOIN tableB b on a.R_ID = b.S_ID
),
cte_m as (
  SELECT a.ID, a.PLACE, b.NAME
  FROM tableA a
  INNER JOIN tableB b on a.M_ID = b.S_ID
)
SELECT r.ID, r.PLACE, r.NAME as R_NAME, m.NAME as M_NAME
FROM cte_r r
LEFT JOIN cte_m m on r.ID = m.ID and r.PLACE = m.PLACE

结果:

ID  PLACE   R_NAME  M_NAME
1   PLACE_1 A       C
2   PLACE_2 B       D

这里演示


0
投票

也可以使用子查询:

SELECT a.id,
   a.place,
   (SELECT name FROM table_b r WHERE a.r_id = r.s_id) AS r_name,
   (SELECT name FROM table_b m WHERE a.m_id = m.s_id) AS m_name
FROM table_a a;
© www.soinside.com 2019 - 2024. All rights reserved.