Kei*_*art 6 python sql sqlalchemy
如何在 SQLAlchemy 中进行嵌套连接?我试图运行的语句是
SELECT a.col1, a.col2, c.col3
FROM a
LEFT OUTER JOIN (b INNER JOIN c ON c.col4 = b.col4) ON b.col5 = a.col5
Run Code Online (Sandbox Code Playgroud)
我需要显示 中的所有记录A,但仅将它们与 中的记录B连接JOIN起来C。
到目前为止我的代码是
session.query(a.col1, a.col2, c.col3).outerjoin(b, b.col5 == a.col5).all()
Run Code Online (Sandbox Code Playgroud)
这让我得到了我所需要的大部分内容,A记录在缺少记录的地方显示空值B;然而,太多的B人进来了,我需要限制他们。但是,如果我只是添加另一个连接,即
session.query(a.col1, a.col2, c.col3).outerjoin(b, b.col5 == a.col5).join(c, b.col4 == c.col4).all()
Run Code Online (Sandbox Code Playgroud)
它会删除 中所有A具有空值的记录B。
我应该指出,我无法直接加入,A因为C两者之间的唯一联系是通过B。
使用以下方法最容易完成此操作subquery:
subq = (session.query(b.col5).join(c, c.col4 == b.col4)).subquery("subq")
qry = session.query(a).outerjoin(subq, a.col5 == subq.c.col5)
print(qry)
Run Code Online (Sandbox Code Playgroud)
如果您展示更多的模型定义,尤其是表之间关系的性质,可能会有更优雅的解决方案。
| 归档时间: |
|
| 查看次数: |
3856 次 |
| 最近记录: |