Tsql 理解t-sql中AND和WHERE的逻辑
我正在使用Transact-SQL、Microsoft Azure。 我试图理解为什么在一些连接查询中Tsql 理解t-sql中AND和WHERE的逻辑,tsql,join,where-clause,Tsql,Join,Where Clause,我正在使用Transact-SQL、Microsoft Azure。 我试图理解为什么在一些连接查询中WHERE和和都可以使用,并给出相同的结果(或者至少在我的数据库中看起来是相同的结果),而在其他查询中WHERE不起作用并且确实起作用 在这里,我将加入两个表: select c.customerID, ca.addressID, ca.addressType from salesLT.customer as c join salesLT.customerADdress as ca on c.c
WHERE
和和都可以使用,并给出相同的结果(或者至少在我的数据库中看起来是相同的结果),而在其他查询中WHERE
不起作用并且确实起作用
在这里,我将加入两个表:
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 to和会得到完全相同的结果
现在,查询基于上一个表,但我正在尝试连接3个表。这里的,其中
不起作用,我必须放一个和
:
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;
如果我将WHERE
更改为并且正常工作。为什么?2个表的联接与3个表的联接有什么区别?
谢谢第二个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'
;
如果我将WHERE
更改为并且正常工作。为什么?
因为使用和
是将条件添加到on
子句中,但是使用其中
是一个新子句
以下是完整的解释:使用多个联接时,语句的基本语法是:
SELECT <columns>
FROM <table 1>
JOIN <table 2> ON <condition>
JOIN <table 3> ON <condition>
WHERE <condition>
如果您转到链接,您将看到select语句语法可能会变得更加复杂-但目前,基本语法应该足以让您开始学习。第二个JOIN
应该在WHERE
子句之前,这就是为什么您要在尝试编写/修改代码之前检查文档中的语言语法,而不仅仅是在随机的地方粘贴新的位,然后感到困惑。@underline\d在随机的地方粘贴新的位被称为通过手学习。如果这让你很生气,就不需要帮助别人。很好的尝试,但我不生气。我不明白为什么这么多人认为试错法是一种很好的学习方式,或者至少是一种其他人应该支持他们的方式。考虑到这些攻击性的评论在这里如此普遍,我甚至不知道我为什么要费心回答,但也许有人会从这次对话中学到一些东西。你的问题的答案在于问题本身——你不明白为什么人们认为某种特定的方法是学习的好方法。试着想象一些人的思维和学习方式与你不同,我知道这很难,但你可能会从你周围的人身上学到一些东西。。再说一次,如果你不想支持,就不要。。
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';