Damit sollten Sie das bekommen, was Sie brauchen ... Jede der Bedingungen der "ODER"-Wo-Klausel können Sie einfach weiter als qualifiziertes Element hinzufügen. Passen Sie dann einfach die Klausel "Haben" an, um die gleiche Anzahl wie die Kriterien zu erfüllen, die Sie zulassen ... Ich habe die Beziehungstabelle an die erste Stelle gesetzt, da dies einen kleineren übereinstimmenden Satz für den "Wert" von Stadt- oder Typwerten hätte. Stellen Sie sicher, dass Sie einen Index für die Beziehungstabelle in der Spalte "WERT" haben.
SELECT STRAIGHT_JOIN
rel.id_obj
from
relations rel
join attributes atr
on rel.id_addr = atr.id
where
( rel.value = 'Apartment' AND atr.name = 'Type' )
or ( rel.value = 'Some City' AND atr.name = 'City' )
group by
atr.id_obj
having
count(*) = 2
limit
0, 20
Wenn Sie alle tatsächlichen Objektdaten AUS diesen Ergebnissen haben möchten, würden Sie sie in etwa so umschließen...
select obj.*
from
( complete SQL statement above ) PreQuery
join Object obj on PreQuery.id_obj = obj.id