如何从SQL Server的另一个表中获取列?

时间:2018-10-31 21:42:09

标签: sql sql-server

我有两个表,“客户”和“文档”。

客户表的定义如下:

ID   | NAME    | ADDRESS | TELEPHONE 
112  | EXAMPLE | ABC#123 | 85548484
115  | WOAH!   | ABC#123 | 85548484

文档的表格如下:

ID|Number|ClientID|Total
1 | 363  |  112   | 25000
2 | 364  |  112   | 24000
3 | 365  |  115   | 21000

如何在不使用INNER JOIN的情况下获得类似结果?

ID|Number|ClientID|Total| NAME    | ADDRESS | TELEPHONE 
1 | 363  |  112   |25000| EXAMPLE | ABC#123 | 85548484
2 | 364  |  112   |24000| EXAMPLE | ABC#123 | 85548484
3 | 365  |  115   |21000| WOAH!   | ABC#123 | 85548484

我尝试了

Select Documents.*, 
       (Select *from Clients where DOcuments.ClientID = Clients.ID ) 
FROM Documents

但是我得到了错误的结果。

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用apply

select d.*, c.name, c.address, c.telephone
from documents d cross apply
     (select c.*
      from clients c
      where d.clientid = c.id
     ) c;

您也可以使用left join

select d.*, c.name, c.address, c.telephone
from documents d left join
     clients c
     on d.clientid = c.id;

或使用full joinright joinouter apply的类似构造。对inner join的限制很好奇。

编辑:

如果您想保留所有客户,即使没有文档的客户,也是如此:

select d.*, c.name, c.address, c.telephone
from clients c left join
     documents d
     on d.clientid = c.id;

答案 1 :(得分:0)

尝试:

选择d。,c。 来自文件d 在c.clientId = d.clientId上左加入客户端c -添加您选择的where子句和order by子句