-1

我正在研究 Transact-SQL,Microsoft Azure。我试图理解为什么在某些连接查询中WHEREAND两者都可以使用并给出相同的结果(或者至少在我的数据库中看起来是相同的结果),而在其他查询where中不起作用并且确实如此。

在这里,我加入了 2 张桌子:

select c.customerID, ca.addressID, ca.addressType
from salesLT.customer as c
join salesLT.customerADdress as ca
on c.customerID = ca.customerID
WHERE ca.addressType = 'Main Office';  --WHERE or AND works the same

这给了我我正在寻找的东西=只有 customerAddress 表中类型为“Main Office”的行。将单词 WHERE 更改为 AND 给出完全相同的结果。

现在,查询是基于以前的,但我正在尝试加入 3 个表。这里WHERE不起作用,我必须放一个AND

select c.customerId, c.companyName, ca.addressID, ca.addressType, a.addressLine1, a. city
from salesLT.customer as c
join salesLT.customerAddress as ca
on c.customerID = ca.customerID
WHERE ca.addressType = 'Main Office' -- error: incorrect syntax near 'join'
join salesLT.address as a
on ca.addressId = a.addressID; 

如果我将其更改WHEREAND它可以工作。为什么?2个表和3个表的join有什么区别?谢谢

4

2 回答 2

1

如果我将其更改WHEREAND它可以工作。为什么?

因为 usingand是在子句中添加条件on,而 usingwhere是新子句。

这是完整的解释:使用多个连接时选择语句的基本语法是:

SELECT <columns>
FROM <table 1>
JOIN <table 2> ON <condition>
JOIN <table 3> ON <condition>
WHERE <condition>

这意味着您的第二个查询应如下所示:

select c.customerId, c.companyName, ca.addressID, ca.addressType, a.addressLine1, a.city
from salesLT.customer as c
join salesLT.customerAddress as ca on c.customerID = ca.customerID
join salesLT.address as a on ca.addressId = a.addressID
WHERE ca.addressType = 'Main Office';

如果您访问该链接,您将看到 select 语句的语法可能会变得更加复杂 - 但现在,基本语法应该足以让您入门。

于 2018-05-02T09:17:41.863 回答
0

第二个JOIN应该在WHERE子句之前

select c.customerId, c.companyName, ca.addressID, ca.addressType, a.addressLine1, a. city
from salesLT.customer as c
join salesLT.customerAddress as ca
on c.customerID = ca.customerID
join salesLT.address as a
on ca.addressId = a.addressID
WHERE ca.addressType = 'Main Office' 
;
于 2018-05-02T09:17:17.007 回答