下面的两种说法是等价的吗?

SELECT [...]
FROM [...]
WHERE some_col in (1,2,3,4,5) AND some_other_expr

SELECT [...]
FROM [...]
WHERE some_col in (1,2,3) or some_col in (4,5) AND some_other_expr

有什么真值表可以用来验证吗?

推荐答案

And优先于Or,所以即使a <=> a1 Or a2

Where a And b 

不一样

Where a1 Or a2 And b,

因为那会被当作

Where a1 Or (a2 And b)

为了使它们保持一致,您需要以下内容(使用括号覆盖优先规则):

 Where (a1 Or a2) And b

下面是一个例子来说明:

Declare @x tinyInt = 1
Declare @y tinyInt = 0
Declare @z tinyInt = 0

Select Case When @x=1 OR @y=1 And @z=1 Then 'T' Else 'F' End -- outputs T
Select Case When (@x=1 OR @y=1) And @z=1 Then 'T' Else 'F' End -- outputs F

对于那些喜欢查阅参考资料的人(按字母顺序):

Sql相关问答推荐

平均SQL

判断时间之间是否有时间

你能过滤一个列表只返回多个结果吗?

使用DatePart函数对日期时间值进行分组

将FLOAT转换为VARBINARY,然后再转换回FLOAT

来自按PostgreSQL分组的最小日期

PostgreSQL:查找继承表中的特定记录属于哪个表

如何将insert语句重复n次使一个值递增?

如何使用聚合连接两个表

其中使用表名作为;行值;记录?

使用 XML 作为 SQL 表

计算组内多个日期间隔go 年的累计天数

清理 XML 数据

获取记录的上一个值,并将其与当前值一起显示

带有数组输入参数的Snowflake UDF优化

将表格和字符串连接以 for each 记录生成订单项目

String_Split 多列

BigQuery Pivot 遗漏行

如何防止 SQL 中的负收入值并将其重新分配到接下来的月份?

如何通过子 Select 在一次更新(并行数组)中多次更新相同的行