0

我正在尝试这样做,但是使用 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 首先自动关联子查询中使用的所有表,然后在 usingcorrelate_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

这可行,但看起来并不漂亮,而且我担心在一些奇怪的边缘情况下可能出现性能问题。

有没有更好、更清洁的方法?

4

0 回答 0