如果字段与按行ID分组的搜索词匹配,则返回SQL返回行ID

时间:2012-04-12 16:29:14

标签: sql sql-server-2008

如果标题令人困惑,我很抱歉,在一个例子中有更好的解释。

我有一个这样的数据表:

1    ProductA    'Cheesy'
2    ProductA    'Creamy'
3    ProductA    'Juicy'
4    ProductB    'Buttery'
5    ProductB    'Clean'
6    ProductC    'Bitter'

我想通过一个搜索词,例如'Cheesy'和'Juicy'。这应该返回:

ProductA

...因为ProductA与id 1和3匹配。

但如果我搜索'Cheesy'和'Bitter',这应该不会返回任何记录,因为ProductA可能有'Cheesy'但它不包含'Bitter'的记录。

这可能吗?

2 个答案:

答案 0 :(得分:2)

一种方法:

declare @Products as Table ( ProductId Int Identity, Product VarChar(16), Property VarChar(16) )
insert into @Products ( Product, Property ) values
  ( 'ProductA', 'Cheesy' ), ( 'ProductA', 'Creamy' ), ( 'ProductA', 'Juicy' ),
  ( 'ProductB', 'Buttery' ), ( 'ProductB', 'Clean' ),
  ( 'ProductC', 'Bitter' )

select Product
  from @Products
  where Property = 'Cheesy'
intersect
select Product
  from @Products
  where Property = 'Juicy'

编辑:其他示例:

-- To retrieve all data for the matching product(s):    
select *
  from @Products
  where Product in (
    select Product
      from @Products
      where Property = 'Cheesy'
    intersect
    select Product
      from @Products
      where Property = 'Juicy' )

答案 1 :(得分:1)

select product from products 
where property = 'Cheesy' -- property 1
or 
property = 'Juicy' -- property 2
group by product
having count(*) >= 2 -- number of properties

我认为,这些方面的某些方面也可以发挥作用。