在一个特定列上连接多个表

时间:2016-01-04 14:50:58

标签: sql oracle join

我还是SQL的新手,所以这个问题可能听起来很基本。我使用的是Oracle数据库,我只能使用选择。我有2个表NamesWorksite

Names表:

ID  Full name   Type
-----------------------
1   Sibelga     Company
2   Belgacom    Company
3   Brussels    Authority
4   Etterbeek   Authority

Worksite表:

ID Worksite CompanyID   AuthorityID
-----------------------------------
12569        1              3
4563         2              4
1589         1              4
1489         1              3

基本上,我希望为每个工作站点获取AuthorityCompany的全名。

我正在尝试进行加入,但它只返回AuthorityCompany的名称。我正在尝试以下查询,但它不起作用,任何想法我哪里出错?

select  
    ID worksite, 
    Full name, 
    Full name
from    
    Worksite
join    
    Names on worksite.companyID = names.ID

1 个答案:

答案 0 :(得分:4)

如果你需要获得两个名字,那么你需要两次加入桌子:

SELECT
    WS."ID worksite",
    C."Full name" AS CompanyName,
    A."Full name" AS AuthorityName
FROM
    Worksite AS WS
LEFT OUTER JOIN Names C ON C.ID = WS.CompanyID
LEFT OUTER JOIN Names A ON A.ID = WS.AuthorityID

我使用了LEFT OUTER JOIN,因为您没有提及是否始终填写ID。如果他们将永远在那里,那么您可以使用INNER JOIN。我也非常担心一个叫做“名字”的桌子。对于设计不佳的数据库而言,这通常是一个危险信号。