[英]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.