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

ホットタブと Wi-Fi があるすべての物件を見つけるにはどうすればよいですか? したがって、上記の例では、プロパティ 1 が必要ですが、2 は必要ありません。

私が推測する 1 つの方法は、必要なものによる内部結合とフィルタリングですが、これを一般化して、機能 A、B、C などを持つすべてのプロパティを検索できるようにしたいと考えています。

4

1 に答える 1

4

WHEREここでの考え方は、propertyName のインスタンスの数をカウントし、それが句の条件で指定された値の数と等しいということです。

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 に答える