Prova questo:
SELECT property_id FROM amenities
WHERE amenity_name IN ('parking', 'elevator')
GROUP BY property_id
HAVING COUNT(amenity_name) >= 2
Ecco cosa sta succedendo...
Per prima cosa, ottieni l'elenco degli ID proprietà che hanno i servizi che ti interessano:
SELECT property_id FROM amenities WHERE amenity_name IN ('parking', 'elevator')
Quindi restringere l'elenco per includere solo gli ID proprietà che dispongono di più servizi. Il raggruppamento per property_id raggruppa i risultati in gruppi univoci in base a quale property_id a cui appartengono. Quindi, contiamo semplicemente il numero di amenity_names in ogni gruppo e controlliamo se è 2 o più.
GROUP BY property_id HAVING COUNT(amenity_name) >= 2
Un presupposto nel codice sopra è che non avrai lo stesso amenity_name associato a un property_id più di una volta. Per eliminare i problemi relativi a ciò, cambia il HAVING
clausola per includere DISTINCT
per eliminare i duplicati, ma non aggiungerlo a meno che non sia necessario.
GROUP BY property_id HAVING COUNT(DISTINCT(amenity_name)) >= 2