繁体   English   中英

SQLAlchemy 子查询访问外部表

[英]SQLAlchemy subquery access outer tables

我无法将此 SQL 转换为有效的 SQLAlchemy 查询:

select *
from A
join B on B.Id = (
    select top 1 Id
    from B
    where B.name = A.name
    order by B.date
)

我试过使用子查询,但失败了:

query = session.query(A, B)

sub_query = session.query(B)
sub_query = sub_query.filter(B.name == A.name)
sub_query = sub_query.order_by(B.date.desc()).limit(1)
sub_query = sub_query.subquery()

query = query.join(B, B.id == sub_query.c.Id)

通过访问子查询中的 A,SqLAlchemy 会将其添加到子查询from子句中,并且不使用外部查询中的 A。

我见过很多 SQLAlchemy 子查询示例,但没有一个使用外部字段。

通过在子查询中使用correlate(A) ,我们告诉 SQLAlchemy 从外部查询中重用A

为了使连接工作,我们应该访问子查询的Id ,所以我们应该只返回Id并使用as_scalar()将子查询转换为标量子查询:

query = session.query(A, B)

sub_query = session.query(B.Id)
sub_query = sub_query.filter(B.name == A.name)
sub_query = sub_query.order_by(B.date.desc()).limit(1)
sub_query = sub_query.correlate(A)

query = query.join(B, B.id == sub_query.as_scalar())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM