0

这个让我很困惑,我将继续通过 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

我将如何找到所有有热水浴缸和无线网络的房产?所以在上面的例子中,我想要属性 1,而不是 2。

我想的一种方法是通过我们想要的内部连接和过滤,但我想概括一下,这样我就可以找到所有具有特征 A、B、C 等的属性。

4

1 回答 1

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 演示

于 2012-10-27T16:52:02.940 回答