Ваш пример запроса упорядочен по another_id
, что используется в предложении корреляции. Итак, вы можете просто сделать:
select a.*
from table_a a
where a.a_field = 'foo' and
exists (select 1
from table_b b
where a.an_id = b.another_id and
b.another_field = 'bar'
)
order by a.created_at asc,
a.an_id desc;
Предполагая, что вы действительно хотите другой столбец , вы можете использовать JOIN
. Проблема в том, что может совпадать несколько строк. Так что вам нужно удалить дубликаты в подзапросе:
select a.*
from table_a a join
(select b.another_id, max(b.another_col) as another_col
from table_b b
where another_field = 'bar'
group by b.another_id
) b
on a.an_id = b.another_id
where a.a_field = 'foo'
order by a.created_at asc, b.another_id desc;
Вы можете использовать свою форму JOIN
, только если знаете, что будет соответствовать не более одной строки.