我有一个返回结果的查询:
DECLARE @VALUE_LIST varchar(1000) = 'B1'
select * from mfr_attr
where attr_val like '%' + @VALUE_LIST + '%' and field_id = 90
我希望'喜欢'语句仅在field_id = 90上进行评估,但也返回所有其他行。
上面我认为错误的是,通过使用where_id = 90,它不会返回其他field_id,但是我需要它的like语句只能对field_id = 90进行评估。
答案 0 :(得分:3)
您只需要对这两个条件进行分组,然后使用OR
来完成剩下的工作:
Declare @VALUE_LIST Varchar(1000) = 'B1';
Select *
From mfr_attr
Where (field_id = 90 And attr_val Like '%' + @VALUE_LIST + '%')
Or field_id != 90;
答案 1 :(得分:1)
使用exists()
:
DECLARE @VALUE_LIST varchar(1000) = 'B1'
select * from mfr_attr m
where exists (
select 1
from mfr_attr i
where i.attr_val like '%' + @VALUE_LIST + '%'
and i.field_id = 90
and i.item_id = m.item_id
)
这将返回item_id
的所有行,其中item_id
的行包含field_id = 90
,该行的attr_val
就像您的条件一样。