To by vám mělo přinést to, co potřebujete... Každou z podmínek klauzule „OR“d where, můžete jednoduše přidávat jako kvalifikovanou položku. Pak stačí upravit klauzuli "Having" tak, aby splňovala stejný počet jako kritéria, která povolujete...Na první místo jsem umístil tabulku vztahů, protože by měla menší odpovídající sadu na "Hodnota" hodnot města nebo typu. Ujistěte se, že máte index v tabulce vztahů ve sloupci "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
Pokud chcete všechna skutečná data objektu Z těchto výsledků, zabalili byste to něco jako...
select obj.*
from
( complete SQL statement above ) PreQuery
join Object obj on PreQuery.id_obj = obj.id