これを試してください:
SELECT property_id FROM amenities
WHERE amenity_name IN ('parking', 'elevator')
GROUP BY property_id
HAVING COUNT(amenity_name) >= 2
何が起こっているのか...
まず、興味のある設備を備えたプロパティIDのリストを取得します。
SELECT property_id FROM amenities WHERE amenity_name IN ('parking', 'elevator')
次に、リストを絞り込んで、複数のアメニティを持つプロパティIDのみを含めます。 property_idでグループ化すると、結果は、それらが属するproperty_idに基づいて一意のグループにまとめられます。次に、各グループのamenity_namesの数を数え、2以上かどうかを確認します。
GROUP BY property_id HAVING COUNT(amenity_name) >= 2
上記のコードの1つの前提条件は、同じamenity_nameがproperty_idに複数回関連付けられないことです。これに関連する問題を解消するには、HAVING
を変更します DISTINCT
を含める句 重複を取り除くためですが、必要な場合を除いて追加しないでください。
GROUP BY property_id HAVING COUNT(DISTINCT(amenity_name)) >= 2