Questo dovrebbe darti ciò di cui hai bisogno ... Ciascuna delle condizioni della clausola "OR"d where, puoi semplicemente continuare ad aggiungere come elemento qualificato. Quindi, regola semplicemente la clausola "Avere" per soddisfare lo stesso numero dei criteri che stai consentendo ... Ho inserito prima la tabella delle relazioni in quanto avrebbe un insieme di corrispondenza più piccolo sul "Valore" di Città o valori di tipo .. . Assicurati di avere un indice nella tabella delle relazioni nella colonna "VALUE".
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
Se desideri tutti i dati dell'oggetto effettivi DA questi risultati, lo avvolgeresti in qualcosa del tipo...
select obj.*
from
( complete SQL statement above ) PreQuery
join Object obj on PreQuery.id_obj = obj.id