Tente isto:
SELECT property_id FROM amenities
WHERE amenity_name IN ('parking', 'elevator')
GROUP BY property_id
HAVING COUNT(amenity_name) >= 2
Aqui está o que está acontecendo...
Primeiro, obtenha a lista de IDs de propriedade que possuem as comodidades em que você está interessado:
SELECT property_id FROM amenities WHERE amenity_name IN ('parking', 'elevator')
Em seguida, restrinja a lista para incluir apenas os IDs de propriedade que tenham mais de uma comodidade. O agrupamento por property_id agrupa os resultados em grupos exclusivos com base em qual property_id eles pertencem. Então, simplesmente contamos o número de amenity_names em cada grupo e verificamos se é 2 ou mais.
GROUP BY property_id HAVING COUNT(amenity_name) >= 2
Uma suposição no código acima é que você não terá o mesmo amenity_name associado a um property_id mais de uma vez. Para eliminar problemas relacionados a isso, altere o
HAVING
cláusula para incluir DISTINCT
para eliminar as duplicatas, mas não adicione a menos que você precise. GROUP BY property_id HAVING COUNT(DISTINCT(amenity_name)) >= 2