You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 01:34:59