为什么AND语句放置会影响记录计数

时间:2014-09-29 19:40:22

标签: sql sql-server

好的所以我的问题是:记录计数有所不同,具体取决于AND语句在我的查询中的位置。例如,如果我有几个INNER JOINS和几个LEFT Joins,并且在我的查询的最后,如果我放置所有AND语句,记录计数是不同的,那么如果我将我的AND语句放在匹配的JOIN表下面。由于AND语句指定了表,为什么它放在查询中的位置呢?

示例1:

FROM table (nolock)
INNER JOIN table2 (nolock) ON Table.ID = table2.ID
INNER JOIN table3 (nolock) ON table2.ID = table3.ID
LEFT JOIN table4 (nolock) ON table3.ID = table4.ID
where table.vendor = 1234
AND table.Active = 1
And table2.Active = 1
And table3.Active = 1
and table4.Active = 1
and table3.Name LIKE 'someName'

示例2:

FROM table (nolock)

INNER JOIN table2 (nolock) ON Table.ID = table2.ID
And table2.Active = 1
INNER JOIN table3 (nolock) ON table2.ID = table3.ID
And table3.Active = 1
and table3.Name LIKE 'someName'
LEFT JOIN table4 (nolock) ON table3.ID = table4.ID
where table.vendor = 1234
and table4.Active = 1
AND table.Active = 1

1 个答案:

答案 0 :(得分:3)

使用INNER JOIN时,JOINWHERE子句中的LEFT JOIN条件是否伴随标准,但WHERE添加加入条件无效不会过滤掉非加入记录,但WHERE table4.Active = 1子句中的条件将排除非加入记录。在您的情况下,JOIN会从table4中排除非加入记录,但将该条件移至{{1}}将不会排除这些记录。

以下是一个简单的演示:SQL Fiddle

注意:我已经假设您的示例代码不是很正确,而且这是基于您的描述的问题。