如果我在WHERE
子句中使用以下任一项,那会有很大的不同:
WHERE [Process Code] = 1 AND ([Material ID] = 'PLT' OR [Material ID] = 'BMI')
--or
WHERE [Process Code] = 1 AND [Material ID] IN ('PLT', 'BMI')
我会用一次而不是另一次吗?
答案 0 :(得分:5)
我想不出我会使用第一个选项的时间。第二种选择更清洁,更具表现力。如果需要将其转换为子选择,那么它将更容易实现。
答案 1 :(得分:4)
在您提供的示例中,他们执行的操作完全相同(它们将导致相同的执行计划)。但是,使用后一种语法(除了更简洁),你可以这样做:
WHERE [Process Code] = 1 AND [Material ID] IN (SELECT ID FROM Material WHERE Type = @type)
答案 2 :(得分:1)
IN
只是一堆OR's
的语法糖。 IN
通常更受欢迎,因为它更容易阅读:它不会重复变量名称,您不必考虑AND
或OR
是否具有更高的运算符优先级。
答案 3 :(得分:1)
查询执行计划通常都是相同的。在运行比较之前,您可以检查表达式是否为null(ISNULL(@parm,'')
或ISNULL([fieldname],'')
等)。
要比较的子查询或表达式返回的任何空值 使用IN或NOT IN返回UNKNOWN到test_expression。使用null 值与IN或NOT IN一起会产生意外结果。