在另一个表中查找具有2个或更多匹配属性的行

时间:2012-10-27 16:49:33

标签: sql tsql

这个让我很难过,我将继续通过SQL解释。这是数据结构:

属性

PropertyId     Name         
1              Property one
2              Property two

属性功能

PropertyFeatureId     FeatureId     PropertyId
1                     1             1
2                     2             1
3                     1             2

功能

FeatureId     Name
1             Hot tub
2             Wifi

我如何找到所有拥有热水浴缸和wifi的房产?所以在上面的例子中,我想要的是1,而不是2。

我认为的一种方式是通过我们想要的内部连接和过滤,但我想概括这一点,以便我可以找到所有具有A,B,C等特征的属性。

1 个答案:

答案 0 :(得分:4)

这里的想法是计算propertyName的实例数,并且它等于WHERE子句条件中提供的值的数量。

SELECT  a.Name
FROM    Property a
        INNER JOIN [Property Features] b
            ON a.PropertyID = b.PropertyId
        INNER JOIN Feature c
            ON b.FeatureID = c.FeatureID
WHERE   c.Name IN ('Hot tub','Wifi')
GROUP BY a.Name
HAVING COUNT(DISTINCT c.Name) = 2

SQLFiddle Demo