如果标题令人困惑,我很抱歉,在一个例子中有更好的解释。
我有一个这样的数据表:
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'的记录。
这可能吗?
答案 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
我认为,这些方面的某些方面也可以发挥作用。