Sql 使用或vs进行过滤

Sql 使用或vs进行过滤,sql,sql-server,tsql,Sql,Sql Server,Tsql,SQL过程中的常见筛选器类似于: 其中(@a=0或@a=a) 显然,如果向proc提供了一个正参数,则在a上进行过滤,否则将显示所有结果。当然,有不同的变体可以解释为空的可能性。但是,以上面给出的具体例子为例,将其写为以下内容是否相同 其中@a在(0,a)是,这些表达式将产生相同的结果 这是基于以下背景: declare @a int set @a = 1 select * from [sometable] where @a in (0, a) …其中a是sometable表中的int列。

SQL过程中的常见筛选器类似于:

其中(@a=0或@a=a)

显然,如果向proc提供了一个正参数,则在
a
上进行过滤,否则将显示所有结果。当然,有不同的变体可以解释为空的可能性。但是,以上面给出的具体例子为例,将其写为以下内容是否相同


其中@a在(0,a)
是,这些表达式将产生相同的结果

这是基于以下背景:

declare @a int
set @a = 1

select *
from [sometable]
where @a in (0, a)
…其中
a
sometable
表中的int列。
在本例中,您将从
sometable
中获取所有记录,其中
a=1

是的,这些表达式将产生相同的结果

这是基于以下背景:

declare @a int
set @a = 1

select *
from [sometable]
where @a in (0, a)
…其中
a
sometable
表中的int列。

在这种情况下,您将从
sometable
中获取所有记录,其中
a=1

@WAMLeslie它是。@WAMLeslie等待,只是为了验证一下,如果a是列,您是说这两个版本不相同吗?你能帮我弄清楚区别是什么吗?@WAMLeslie不,那不是我想要的。我不确定我会说些什么来给人留下这样的印象?这个想法是,如果我传入一个7,那么我希望它只返回a=7的记录。如果表中任何一行的a=7,我不想返回所有行。那没有任何意义???@WAMLeslie肯定是的。它是正在计算的当前记录的值。如果
a
是一列,则由于上下文的原因,它仍然有效
其中@a=a
指的是正在计算的行中
a
的值。@WAMLeslie是的。@WAMLeslie稍等,只是为了验证一下,如果a是列,您是说这两个版本不一样吗?你能帮我弄清楚区别是什么吗?@WAMLeslie不,那不是我想要的。我不确定我会说些什么来给人留下这样的印象?这个想法是,如果我传入一个7,那么我希望它只返回a=7的记录。如果表中任何一行的a=7,我不想返回所有行。那没有任何意义???@WAMLeslie肯定是的。它是正在计算的当前记录的值。如果
a
是一列,则由于上下文的原因,它仍然有效
其中@a=a
指的是被评估行中
a
的值。我认为OR对于这一点更为明确。也许对于这个非常简单的例子。当您有一长串值和更复杂的逻辑时,中的
会将这些值非常整齐地组合在一起。也许,但在这种情况下,不会再将逻辑和放在同一个位置。也许是一个不同的世界。“我很可能不明白,但是如果你有时间,你能不能添加一个更复杂的逻辑的例子,让IN简化?”MichaelZ
x(1,2,3,4,5)
x=1或x=2或x=3或x=4或x=5
。第一个要简单得多。我知道
中的
是如何工作的。我只是没有很好地解释我说的话。我可以想象这个应用在动态过滤器中。像
SELECT*FROM T WHERE(@CUST=''或[CUST]=@CUST)和(@CATEGORY=''或[CATEGORY]=@CATEGORY)
我认为OR对于这个东西更清楚。也许对于这个非常简单的例子。当您有一长串值和更复杂的逻辑时,
中的
会将这些值非常整齐地组合在一起。也许,但在这种情况下,不会再将逻辑和放在同一个位置。也许是一个不同的世界。“我很可能不明白,但是如果你有时间,你能不能添加一个更复杂的逻辑的例子,让IN简化?”MichaelZ
x(1,2,3,4,5)
x=1或x=2或x=3或x=4或x=5
。第一个要简单得多。我知道
中的
是如何工作的。我只是没有很好地解释我说的话。我可以想象这个应用在动态过滤器中。类似于
从T中选择*,其中(@CUST=''或[CUST]=@CUST)和(@CATEGORY=''或[CATEGORY]=@CATEGORY)