2017-02-13 76 views
0

我有两个表。第一个表格包含代码编号,第二个表格包含与该代码编号对应的名称。第一个表格有一个源代码和一个目标代码。第二个表格在不同的行中包含这两个代码。因此,表看起来像这样SQL - 将两个源列连接到一个目标列

表1

|Source_code|Target_code| 
|253  |568  | 

表2

|Code|Name | 
|253 |John | 
|568 |Steve| 

我想这样的结果:

|source_code|name |target_code|name | 
|253  |John |568  |Steve| 

我在加入这两个表两次这样做单个查询,如下所示:

select A.source_code, B.name, A.target_code, C.name 
from table1 A 
join table2 B on A.source_code = B.code 
join table2 C on A.target_code = C.code 

这看起来不是处理此查询的最佳方式。有一个更好的方法吗?

+0

您正在使用哪些DBMS? Postgres的?甲骨文? –

+2

看起来很好。 – jarlh

+0

除了你需要加入Table2的代码而不是名字:P – xQbert

回答

0

两次加入表2是处理这个问题的方法。为什么?因为你在Table1中有两个到Table2的外键。由于桌子应该连接到钥匙上,并且您有两个钥匙到一个桌子,您的解决方案是几乎合适。

我看到的唯一问题是您应该加入table2的代码不是名称。

SELECT A.source_code, B.name, A.target_code, C.name 
FROM table1 A 
INNER JOIN table2 B 
    on A.source_code = B.Code 
INNER JOIN table2 C 
    on A.target_code = C.code