2011-08-08 127 views
4

它使太大的差別,如果我在任何一個WHERE條款以下的使用:在關鍵詞與關鍵字OR

WHERE [Process Code] = 1 AND ([Material ID] = 'PLT' OR [Material ID] = 'BMI') 

--or 

WHERE [Process Code] = 1 AND [Material ID] IN ('PLT', 'BMI') 

會不會有一段時間,我會用一個,而不是其他?

回答

4

在你提供的例子中,他們正在做同樣的事情(他們會得到相同的執行計劃)。然而,與後者的語法(除了是更簡潔),你可以這樣做:

WHERE [Process Code] = 1 AND [Material ID] IN (SELECT ID FROM Material WHERE Type = @type) 
5

我想不出的時候,我會用第一個選項。第二種選擇更清潔,更有表現力。如果需要將其轉換爲子選擇,則會更容易。

1

IN只是一堆OR's的語法糖。通常最好使用IN,因爲它更容易閱讀:它不重複變量名稱,因此您不必考慮ANDOR是否具有更高的運算符優先級。

1

查詢執行計劃通常都是相同的。在運行比較之前,您可能會檢查您的表達式爲空(ISNULL(@parm,'')ISNULL([fieldname],'')等)。

微軟警告:由子查詢或表達式返回比較

的任何NULL值使用IN或不圖回報未知與test_expression。在IN或NOT IN中使用空值 可能會產生意想不到的結果。