我有一个小问题。我有两个由第三个(ip_client)绑定的 SQL 表(ip 和客户端)。我没有使用 SQLAlchemy 附带的多对多关系,因为我的一些查询发生了复杂的过滤。
一切都很好,除了一个愚蠢的用例。我想列出所有没有客户端的IP,没有外部连接我做不到。
Outer Join 需要几秒钟,其中使用 Left Join 的相同查询是即时的。但不可能避免 SQL Alchemy 创建的 INNER JOIN。我尝试了所有关系,并移动了我的外键,但它保持了一个 INNER JOIN。
基于相同的问题,每当我尝试使用显示客户端数量的列列出我的所有 ips 时,查询都不会返回具有 0 个客户端的 ips(INNER JOIN 的自然行为)。
有没有办法强制这样做?
顺便说一句,这是我的查询:
query = (session.query(Ip, func.count(Client.id))
.join(ClientIp, ClientIp.ip_id==Ip.id)
.join(Client, Client.id==ClientIp.client_id)
.group_by(Ip.id))
查询创建或连接函数中是否存在强制 LEFT JOIN 的技巧?