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

时间:2017-03-20 19:17:36

标签: sql-server

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

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

enter image description here

我希望'喜欢'语句仅在field_id = 90上进行评估,但也返回所有其他行。

上面我认为错误的是,通过使用where_id = 90,它不会返回其他field_id,但是我需要它的like语句只能对field_id = 90进行评估。

2 个答案:

答案 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就像您的条件一样。