好,所以我的問題是:根據AND語句在查詢中的位置在記錄計數方面存在差異。例如,如果我有幾個INNER JOINS和一對LEFT JOIN,並且在查詢的最後,如果我放置所有AND語句,則記錄數是不同的,如果我將AND語句放在匹配的JOIN表下。由於AND語句指定了表,爲什麼它放在查詢中的位置很重要?爲什麼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
我不相信這是可能的。優化器在執行之前將所有的'ON'謂詞移動到'WHERE'以用於'INNER JOIN'。 – zerkms 2014-09-29 19:45:14
你的邏輯條件是不同的。例如,第二個片段缺少'table4.Name LIKE'someName''。 – 2014-09-29 19:45:19
你能寫出真正的「等價」查詢嗎? (或者至少,你正在使用的條件)。 '從表和表。活動= 1'?,這是沒有道理的。在第一個例子中,你使用'和table4.Name LIKE'someName'',第二個使用'table3.Name LIKE'someName''。 PLease,花點時間寫出正確的查詢 – Lamak 2014-09-29 19:45:29