繁体   English   中英

在SQL中多次连接

[英]join multiple times in SQL

这些是2个表。 Tech_data:

Id Tech Agent1_id Agent2_ID
1  JAVA   1           2   
2  SQL    3           4

Agent_table

Id Name
1  Mike
2  John
3  Jim
4  Baron

我需要编写一个查询以带来以下输出

TECH_ID   Tech  Agent1_Name Agent2_Name
1         Java    Mike       John
2         SQL     Jim        Baron

我在tech_id = agent1_id上写了LEFT OUTER JOIN ON,但是我不知道如何在ON条件下加入2个ID。

为了避免必须对同一张表进行多次联接,可以取消透视,联接然后进行透视(然后,如果您有50个ID列,则仍然只需要执行一次联接):

SQL小提琴

Oracle 11g R2架构设置

CREATE TABLE Tech_data (Id, Tech, Agent1_id, Agent2_ID ) AS
SELECT 1,  'JAVA', 1, 2 FROM DUAL UNION ALL
SELECT 2,  'SQL',  3, 4 FROM DUAL;

CREATE TABLE Agent_table ( Id, Name ) AS
SELECT 1,  'Mike' FROM DUAL UNION ALL
SELECT 2,  'John' FROM DUAL UNION ALL
SELECT 3,  'Jim' FROM DUAL UNION ALL
SELECT 4,  'Baron' FROM DUAL;

查询1

SELECT *
FROM   (
  SELECT t.id,
         t.tech,
         t.num,
         a.name
  FROM   (
      SELECT *
      FROM   tech_data
      UNPIVOT ( Agent_ID FOR num IN ( Agent1_id AS 1, Agent2_id AS 2 ) )
    ) t
    INNER JOIN Agent_table a
    ON ( t.agent_id = a.id )
)
PIVOT ( MAX( name ) FOR num IN ( 1 AS Agent1_Name, 2 AS Agent2_Name ) )

结果

| ID | TECH | AGENT1_NAME | AGENT2_NAME |
|----|------|-------------|-------------|
|  1 | JAVA |        Mike |        John |
|  2 |  SQL |         Jim |       Baron |

您可以在同一个表上添加第二个左外部联接,就像您使用的左外部联接一样,方法是为它们赋予不同的别名,如下所示。

select t.Id tech_id, t.tech, a1.name, a2.name
from tech_data t
left outer join agent_table a1 on a1.Id = t.agent1_id
left outer join agent_table a2 on a2.Id = t.agent2_Id;

检查下面的小提琴: http ://sqlfiddle.com/#!4/ 73f02b/1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM