-- поиск class_table1 у которых (tip_field=1 или 2) и text>157
select class_table1.*
from class_table1
left join class_table2 on class_table1.id = class_table2.id
where class_table1.category_id = 104
and (
(class_table2.caption = 'tip_field' and class_table2.value in ('1', '2'))
or (class_table2.caption = 'text' and class_table2.value::int > 157)
)
GROUP BY class_table1.id
HAVING COUNT( DISTINCT class_table2.caption) = 2 -- результат валидный если оба искомых свойства были найдены