Essayez ça :
SELECT property_id FROM amenities
WHERE amenity_name IN ('parking', 'elevator')
GROUP BY property_id
HAVING COUNT(amenity_name) >= 2
Voici ce qui se passe...
Tout d'abord, obtenez la liste des propriétés qui possèdent les équipements qui vous intéressent :
SELECT property_id FROM amenities WHERE amenity_name IN ('parking', 'elevator')
Ensuite, réduisez la liste pour n'inclure que les identifiants de propriété qui ont plus d'une commodité. Le regroupement par ID de propriété permet de regrouper les résultats en groupes uniques en fonction de l'ID de propriété à laquelle ils appartiennent. Ensuite, nous comptons simplement le nombre de noms de commodités dans chaque groupe et vérifions s'il est égal ou supérieur à 2.
GROUP BY property_id HAVING COUNT(amenity_name) >= 2
Le code ci-dessus part du principe que le même nom d'agrément ne sera pas associé plusieurs fois à un numéro de propriété. Pour éliminer les problèmes liés à cela, modifiez le paramètre HAVING
pour inclure la clause DISTINCT
pour éliminer les doublons, mais ne l'ajoutez que si vous en avez besoin.
GROUP BY property_id HAVING COUNT(DISTINCT(amenity_name)) >= 2