2

我正在使用 SQL Server 2008 R2。

我有一个查询,其中我使用左外连接从两个表中获取记录。

现在,查询是这样的:

SELECT Table1.Id, Table1.Name, Table2.DeviceId
FROM Table1
LEFT OUTER JOIN Table2 ON Table1.Id = Table2.Table1Id AND Table2.DeviceId=4
WHERE Table1.Name LIKE 'xxxxxx' AND Table1.IsDeleted=0

它给了我想要的结果。

但是当我使用

SELECT Table1.Id, Table1.Name, Table2.DeviceId 
FROM Table1 
LEFT OUTER JOIN Table2 ON Table1.Id = Table2.Table1Id  
WHERE Table1.Name LIKE 'xxxxxx' AND Table1.IsDeleted=0 AND Table2.DeviceId=4

它没有给出预期的结果。

现在,我不明白 ON 语句和 WHERE 子句中的 AND 运算符有什么区别?

谁能解释一下?

谢谢..

4

1 回答 1

2

“了解外连接非常重要,ON 和 WHERE 子句扮演非常不同的角色,因此,它们不能互换。WHERE 子句仍然扮演简单的过滤角色——即,它保留真实的情况并丢弃假和未知的情况。使用这样的东西,在where子句中使用谓词。但是,ON子句并没有起到简单的过滤作用,而是更多的匹配作用。换句话说,保留侧的一行将是返回 ON 谓词是否找到匹配项。因此,ON 谓词仅确定非保留端的哪些行与保留端的行匹配,而不是是否返回保留端的行。**考试 70-461:查询 Microsoft SQL Server 2012

于 2013-10-28T05:05:38.037 回答