好的所以我的问题是:记录计数有所不同,具体取决于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
答案 0 :(得分:3)
使用INNER JOIN
时,JOIN
或WHERE
子句中的LEFT JOIN
条件是否伴随标准,但WHERE
添加加入条件无效不会过滤掉非加入记录,但WHERE table4.Active = 1
子句中的条件将排除非加入记录。在您的情况下,JOIN
会从table4中排除非加入记录,但将该条件移至{{1}}将不会排除这些记录。
以下是一个简单的演示:SQL Fiddle
注意:我已经假设您的示例代码不是很正确,而且这是基于您的描述的问题。