Я пытаюсь сделать что-то вроде этого, но с sqlalchemy:
select t1.a, t2.x, l1.a_x, l2.a_x_y
from t1
join t2 on t1.id = t2.id
join lateral (select t1.a + t2.x as a_x) l1 on true
join lateral (select l1.a_x + t2.y as a_x_y) l2 on true
Проблема в том, что sqlalchemy сначала автокоррелирует все таблицы, используемые в подзапросе, а затем, после использования correlate_except
, поднимает FROM clause expected
исключение.
ОБНОВЛЕНИЕ : вот упрощенная демонстрация: https://pastebin.com/XrkW2cMT sa.__version__: 1.3.17
Лучше всего использовать некоторую имитацию FROM, что-то вроде этого:
select([]).select_from(text("(select 1) as X")).lateral("l1")
lateral (select a + b as c from (select 1) as X) l1
Это работает, но выглядит некрасиво, и меня беспокоят возможные проблемы с производительностью в некоторых странных крайних случаях.
Есть ли лучше , почище способ?