Sql server SQL Server tsql括号逻辑?

Sql server SQL Server tsql括号逻辑?,sql-server,tsql,logic,Sql Server,Tsql,Logic,(动态查询…) 从myTable中选择*,其中 (否。您需要这些,但您可以删除语句中周围的 select * from myTable where (@param1 IS NULL OR @param1 IN (SELECT item FROM blabla1)) and (@param2 IS NULL OR @param2 IN (SELECT item FROM blabla2)) 如果您删除了您询问的内容,您将得到一个如下的查询 select * from myTab

(动态查询…)

从myTable中选择*,其中

(否。您需要这些,但您可以删除
语句中
周围的

select * 
from myTable
where
  (@param1 IS NULL OR @param1 IN (SELECT item FROM blabla1))
  and 
  (@param2 IS NULL OR @param2 IN (SELECT item FROM blabla2))
如果您删除了您询问的内容,您将得到一个如下的查询

select * 
from myTable
where
  param1 IS NULL
  OR
  (param1 IN (SELECT item FROM blabla1)) and param2 IS NULL 
  OR
  (param2 IN (SELECT item FROM blabla2))

不需要。您需要这些,但可以删除
语句中
周围的

select * 
from myTable
where
  (@param1 IS NULL OR @param1 IN (SELECT item FROM blabla1))
  and 
  (@param2 IS NULL OR @param2 IN (SELECT item FROM blabla2))
如果您删除了您询问的内容,您将得到一个如下的查询

select * 
from myTable
where
  param1 IS NULL
  OR
  (param1 IN (SELECT item FROM blabla1)) and param2 IS NULL 
  OR
  (param2 IN (SELECT item FROM blabla2))

不,您不能删除它们。如果我们删除这些括号,它将影响逻辑。

不,您不能删除它们。如果我们删除这些括号,它将影响逻辑。

@MikaelEriksson是正确的,结果将不一样,因为AND运算符的优先级高于OR运算符()


在您的示例中,不是
(A或A')和(B或B')
,而是
A或(A'和B)或B'

@MikaelEriksson是正确的,结果将不一样,因为and运算符的优先级高于or运算符()


在您的示例中,将得到
A或A')和(B或B')
,而不是
A或(A'和B)或者B'

与在逻辑中出错相比,使用不必要的括号和更可读/可理解的逻辑更好。您可能会建议自己,逻辑操作顺序的工作方式与MSSQL的工作方式不同。与在逻辑中出错相比,使用不必要的括号和更可读/可理解的逻辑更好G告诉你自己,逻辑运算的顺序实际上比MSSQL的工作方式不同。