Essayez ceci :
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 ID de propriété qui ont les commodités 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'un équipement. Le regroupement par property_id regroupe les résultats dans des groupes uniques en fonction du property_id auquel ils appartiennent. Ensuite, nous comptons simplement le nombre de amenity_names dans chaque groupe et vérifions s'il est supérieur ou égal à 2.
GROUP BY property_id HAVING COUNT(amenity_name) >= 2
Une hypothèse dans le code ci-dessus est que vous n'aurez pas le même amenity_name associé à un property_id plus d'une fois. Pour éliminer les problèmes liés à cela, modifiez le HAVING
clause pour inclure 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