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
。