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

标签 sql oracle join

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

名称表:

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

最佳答案

如果你需要得到两个名字,那么你需要加入表两次:

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。我也非常注意名为“名称”的表格。对于设计不当的数据库,这通常是一个危险信号。

关于sql - 在一个特定列上连接多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34593764/

相关文章:

sql - 为一对多表实现查找或插入

java - Spring @Transactional 具有来自不同调用源的不同隔离级别

oracle - 表依赖项的递归查询没有像我想要的那样递归

mysql - SQLAlchemy:使用不同类型键的表之间的关系?

mysql,加入同一个表?

sql - MySQL/SQL 的简写 "Using"可以不说 "Inner Join"就用吗?

sql - 连接下一个连续行

按平均值排序的 MySQL 表 JOIN

java - 从oracle获取后java中的不同日期格式

mysql - 如何为 MySQL 组合主键表编写 'optional' WHERE 子句