设置sqlalchemy查询结果的交集

时间:2015-05-26 00:41:18

标签: sql sqlalchemy

我尝试返回两个ORM查询结果的重叠,这两个查询都会返回一个整数列表。我有两个表,我知道如何对它们执行简单的筛选查询。

query1 = session.query(T1.UID).filter(T1.date < now)
query2 = session.query(T2.UID).filter(T2.date < now)

我想要的是一个查询,它将返回出现在这些查询返回的两个结果中的UID。单个查询会返回大量数据,但我正在寻找相对较小的重叠。概念上类似于<result of query1>.in_(<result of query2>)

1 个答案:

答案 0 :(得分:1)

简单的内连接可以做到:

q = (session.query(T1.UID)
     .join(T2, T1.UID == T2.UID)
     .filter(T1.date < now)
     .filter(T2.date < now)
     )

如果你真的想使用你的两个查询,下面就是这样:

query1 = query1.filter(T1.UID.in_(query2.subquery()))

还要确保两列都有索引。