Prueba esto:
SELECT property_id FROM amenities
WHERE amenity_name IN ('parking', 'elevator')
GROUP BY property_id
HAVING COUNT(amenity_name) >= 2
Esto es lo que está pasando...
Primero, obtenga la lista de ID de propiedades que tienen los servicios que le interesan:
SELECT property_id FROM amenities WHERE amenity_name IN ('parking', 'elevator')
Luego reduzca la lista para incluir solo aquellas ID de propiedad que tienen más de un servicio. La agrupación por property_id agrupa los resultados en grupos únicos según el property_id al que pertenecen. Luego, simplemente contamos el número de amenity_names en cada grupo y verificamos si son 2 o más.
GROUP BY property_id HAVING COUNT(amenity_name) >= 2
Una suposición en el código anterior es que no tendrá el mismo amenity_name asociado con un property_id más de una vez. Para eliminar problemas relacionados con eso, cambie HAVING
cláusula para incluir DISTINCT
para eliminar los duplicados, pero no lo agregue a menos que lo necesite.
GROUP BY property_id HAVING COUNT(DISTINCT(amenity_name)) >= 2