我正在使用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运算符的区别?
任何人都可以解释一下吗?
谢谢..
答案 0 :(得分:2)
“理解使用外连接时,非常重要的是ON和WHERE子句扮演非常不同的角色,因此它们不可互换.WHERE子句仍然扮演一个简单的过滤角色 - 即,它保持真实使用类似的东西并在where子句中使用谓词。然而,ON子句不起简单的过滤作用;相反,它更像是一个匹配的角色。换句话说,保留了一行无论ON谓词是否找到匹配,都将返回side。因此ON谓词只确定来自非保留端的哪些行与保留端的行匹配 - 而不是是否从保留端返回行。 **考试70-461:查询Microsoft SQL Server 2012