Spróbuj tego:
SELECT property_id FROM amenities
WHERE amenity_name IN ('parking', 'elevator')
GROUP BY property_id
HAVING COUNT(amenity_name) >= 2
Oto, co się dzieje...
Najpierw zdobądź listę identyfikatorów obiektów, w których znajdują się interesujące Cię udogodnienia:
SELECT property_id FROM amenities WHERE amenity_name IN ('parking', 'elevator')
Następnie zawęź listę, aby zawierała tylko te identyfikatory właściwości, które mają więcej niż jedno udogodnienie. Grupowanie według property_id łączy wyniki w unikalne grupy na podstawie tego, do którego property_id należą. Następnie po prostu liczymy liczbę amenity_names w każdej grupie i sprawdzamy, czy jest ona 2 lub większa.
GROUP BY property_id HAVING COUNT(amenity_name) >= 2
Jedno założenie w powyższym kodzie jest takie, że nie będziesz mieć tego samego amenity_name skojarzonego z atrybutem property_id więcej niż raz. Aby wyeliminować problemy z tym związane, zmień HAVING
klauzula do uwzględnienia DISTINCT
aby wyeliminować duplikaty, ale nie dodawaj ich, chyba że tego potrzebujesz.
GROUP BY property_id HAVING COUNT(DISTINCT(amenity_name)) >= 2