Detta bör ge dig det du behöver... Var och en av "ELLER"d där klausulvillkoren kan du bara fortsätta lägga till som en kvalificerad artikel. Sedan är det bara att justera "Having"-satsen så att den uppfyller samma antal som kriterierna du tillåter...Jag har satt relationstabellen först eftersom det skulle ha en mindre matchad uppsättning på "Värde" för stad- eller typvärden. Se till att du har ett index i relationstabellen i kolumnen "VÄRDE".
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
Om du vill ha alla faktiska objektdata FRÅN detta resultat, skulle du linda in det ungefär som...
select obj.*
from
( complete SQL statement above ) PreQuery
join Object obj on PreQuery.id_obj = obj.id