C# 带或和的SQL WHERE语句

C# 带或和的SQL WHERE语句,c#,sql,C#,Sql,我有一个SQL WHERE语句: WHERE code = @code OR approvedby = @approvedby AND [status] = 'APPROVED' 我想显示已批准状态的信息,code和approvedby参数为true,状态必须为已批准,但问题为挂起状态也将显示 有人能解释一下我是否犯了错误吗?我猜你只是缺少了括号: WHERE (code = @code OR approvedby = @approvedby) AND [status] = 'AP

我有一个SQL WHERE语句:

WHERE code = @code OR approvedby = @approvedby AND [status] = 'APPROVED'
我想显示已批准状态的信息,
code
approvedby
参数为true,状态必须为已批准,但问题为挂起状态也将显示


有人能解释一下我是否犯了错误吗?

我猜你只是缺少了括号:

WHERE (code = @code OR approvedby = @approvedby) AND
      [status] = 'APPROVED'

我猜你只是缺少括号:

WHERE (code = @code OR approvedby = @approvedby) AND
      [status] = 'APPROVED'

您的查询中有模糊的逻辑,因此计算机的处理可能与您期望的不同。试着把括号放在你需要的地方

A or B and C - ambiguous
(A or B) and C - A or B can be true, and C is true
A or (B and C) - either A is true, or B and C are true together
您可能想要:

WHERE 
(code = @code OR approvedby = @approvedby)
AND
[status] = 'APPROVED'

您的查询中有模糊的逻辑,因此计算机的处理可能与您期望的不同。试着把括号放在你需要的地方

A or B and C - ambiguous
(A or B) and C - A or B can be true, and C is true
A or (B and C) - either A is true, or B and C are true together
您可能想要:

WHERE 
(code = @code OR approvedby = @approvedby)
AND
[status] = 'APPROVED'

我想你需要括号
,其中(code=@code或approvedby=@approvedby)和[status]='approvedby'
这是由于操作顺序-
s先完成,然后是
s,所以你的语句的处理方式是:
code=@code或(approvedby=@approvedby和[status]='approvedby')
,并且返回
code=@code
的任何内容,因为SQL的
运算符优先级中只有一半需要为
true
描述为Think you need方括号
中(code=@code或approvedby=@approvedby)和[status]的可能重复='APPROVED'
这是由于操作顺序-
s先完成,然后是
s,因此您的语句的处理方式如下:
code=@code或(approvedby=@approvedby和[status]='APPROVED')
,并返回
code=@code
中的任何内容,由于
中只有一半需要为
SQL的运算符优先级被描述为可能的重复,因此在技术上并不含糊-操作顺序被定义为
之前。所以他写的方式就像你的第三项一样被处理,任何
code=@code
的内容都会被返回。@RufusL-你说得对,它对解析器来说并不含糊不清,并且总是按照操作顺序进行处理。这种歧义源于易出错的人,他们不像可靠的解析器那样处理查询逻辑。从技术上讲,这并不含糊——操作顺序的定义是
之前。所以他写的方式就像你的第三项一样被处理,任何
code=@code
的内容都会被返回。@RufusL-你说得对,它对解析器来说并不含糊不清,并且总是按照操作顺序进行处理。这种歧义源于容易出错的人,他们不像可靠的解析器那样处理查询逻辑。