SQLAlchemy中合并查询时如何仅选取特定列?
解决方案
方法一:直接合并筛选条件(最简洁高效)
不需要借助子查询,直接将两个筛选条件用逻辑或(|)组合,这是性能最优的实现方式:
q3 = select(Usr).where(Usr.usr_name.like("%Bob%") | (Usr.usr_age > 12))
方法二:修改子查询仅返回usr_id列
如果必须使用子查询的方式,只需调整q1和q2,让它们只查询usr_id字段,就能在in_条件中正常使用:
# 调整q1、q2,仅选择usr_id列 q1 = select(Usr.usr_id).where(Usr.usr_name.like("%Bob%")) q2 = select(Usr.usr_id).where(Usr.usr_age > 12) # 构造q3 q3 = select(Usr).where(Usr.usr_id.in_(q1) | Usr.usr_id.in_(q2))
方法三:基于原有查询构造投影子查询
如果不想修改已定义的q1和q2,可以在in_中嵌套子查询,单独提取usr_id列:
q3 = select(Usr).where( Usr.usr_id.in_(select(Usr.usr_id).from_statement(q1)) | Usr.usr_id.in_(select(Usr.usr_id).from_statement(q2)) )
方法四:使用UNION合并查询结果
也可以通过union合并两个查询的结果,直接获取符合任一条件的用户:
q_union = q1.union(q2) q3 = select(Usr).from_statement(q_union)
内容的提问来源于stack exchange,提问作者sevan
相关产品推荐
相关产品推荐

