Sql server 仅搜索其中一行时返回具有相同键的行

Sql server 仅搜索其中一行时返回具有相同键的行,sql-server,Sql Server,我有一个正在返回结果的查询: DECLARE @VALUE_LIST varchar(1000) = 'B1' select * from mfr_attr where attr_val like '%' + @VALUE_LIST + '%' and field_id = 90 我希望'like'语句只对字段_id=90求值,但也返回所有其他行 上面我认为错误的是,通过使用where field_id=90,它不会返回另一个field_id,但我需要类似的语句来仅对field_id=90

我有一个正在返回结果的查询:

DECLARE @VALUE_LIST varchar(1000) = 'B1'
select * from mfr_attr 
where attr_val like '%' + @VALUE_LIST + '%' and field_id = 90

我希望'like'语句只对字段_id=90求值,但也返回所有其他行


上面我认为错误的是,通过使用where field_id=90,它不会返回另一个field_id,但我需要类似的语句来仅对field_id=90求值。

您只需将这两个条件分组,并对其余部分使用

Declare @VALUE_LIST Varchar(1000) = 'B1';
Select  *
From    mfr_attr
Where   (field_id = 90 And attr_val Like '%' + @VALUE_LIST + '%')
Or      field_id != 90;

您只需将这两个条件分组,并对其余条件使用

Declare @VALUE_LIST Varchar(1000) = 'B1';
Select  *
From    mfr_attr
Where   (field_id = 90 And attr_val Like '%' + @VALUE_LIST + '%')
Or      field_id != 90;
使用
exists()

这将返回
item\u id
的所有行,其中
item\u id
有一行
field\u id=90
,并且该行的
attr\u val
类似于您的类似条件。

使用
exists()



这将返回
item\u id
的所有行,其中
item\u id
有一行
field\u id=90
,并且该行的
attr\u val
类似于您的条件。

那么,您实际想要得到的结果是什么呢?,
我希望'like'语句只对字段_id=90求值,但也返回所有其他行
这是什么意思?@Siyual明白了,但我指的是具有任何字段_id的行。实际上不,我不认为,这是返回所有行,并且没有使用like筛选器。您使用的是SQL Server或MySQL?@johncode使用的是SQL Server。所以,您真正想要得到的结果是什么?
我希望'like'语句只对字段id=90求值,但也返回所有其他行
这意味着什么?@Siyual知道了,但我是指具有任何字段id的行。实际上,不,我不认为,这将返回所有行,而不是使用like筛选器。您使用的是SQL Server或MySQL?@johncode使用的是SQL Server。我以为是这样,但这将返回所有行,而不是使用like筛选器。@DavidTunnell您确定吗?这应该只将
like
过滤器应用于
字段id=90
的记录,但它仍然会返回所有其他内容。这不是你要找的吗?我以为是这样,但这会返回所有行,并且没有使用like筛选器。@DavidTunnell你确定吗?这应该只将
like
过滤器应用于
字段id=90
的记录,但它仍然会返回所有其他内容。这不是你要找的吗?这会不会返回与问题中的查询相同的结果,或者我是不是因为时间太晚而遗漏了什么?@ZoharPeled该表很可能是一个EAV表,在这种情况下,OP希望所有与具有
值的
实体
相关的行
属性=90的
类似。其中
entity=item\u id
attribute=field\u id
value=attr\u val
。这不会返回与问题中的查询相同的结果,还是因为时间太晚而遗漏了什么?@ZoharPeled该表很可能是一个EAV表,在这种情况下,OP希望所有与具有
值的
实体
相关的行
属性=90的
类似。其中
entity=item\u id
attribute=field\u id
value=attr\u val