Това трябва да ви осигури това, от което се нуждаете... Всяко от условията на клауза "OR"d where можете просто да продължите да добавяте като квалифициран елемент. След това просто коригирайте клаузата „Имащ“, за да отговаря на същия брой като критерии, които разрешавате... Поставих таблицата на релациите на първо място, тъй като това би имало по-малък съвпадащ набор от „Стойност“ на град или тип стойности. Уверете се, че имате индекс в таблицата на релациите в колоната "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
Ако искате всички действителни обектни данни ОТ този резултат, бихте го увили нещо като...
select obj.*
from
( complete SQL statement above ) PreQuery
join Object obj on PreQuery.id_obj = obj.id