Probeer dit:
SELECT property_id FROM amenities
WHERE amenity_name IN ('parking', 'elevator')
GROUP BY property_id
HAVING COUNT(amenity_name) >= 2
Dit is wat er aan de hand is...
Haal eerst de lijst op met Property ID's met de voorzieningen waarin u geïnteresseerd bent:
SELECT property_id FROM amenities WHERE amenity_name IN ('parking', 'elevator')
Beperk vervolgens de lijst om alleen die Property ID's op te nemen die meer dan één voorziening hebben. Door te groeperen op property_id worden de resultaten gebundeld in unieke groepen op basis van de property_id waartoe ze behoren. Vervolgens tellen we gewoon het aantal amenity_names in elke groep en controleren of het er 2 of meer zijn.
GROUP BY property_id HAVING COUNT(amenity_name) >= 2
Een aanname in de bovenstaande code is dat u niet meer dan één keer dezelfde amenity_name aan een property_id zult hebben. Om daarmee verband houdende problemen te voorkomen, wijzigt u de HAVING
clausule om DISTINCT
op te nemen om de duplicaten te verwijderen, maar voeg het niet toe tenzij je het nodig hebt.
GROUP BY property_id HAVING COUNT(DISTINCT(amenity_name)) >= 2