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

DB2中如何不罗列所有列,仅查询基表列(排除rn列)?

在DB2中如何只查询基表全部列(排除开窗函数生成的rn列)

在DB2里完全可以不用逐一罗列列就能实现这个需求,给你两种实用的方案:

方案1:使用QUALIFY子句(推荐)

DB2支持QUALIFY关键字,它能直接在主查询阶段过滤开窗函数的结果,无需额外嵌套子查询,直接返回原表的所有列:

select t.*
from mytable t 
where option
qualify row_number() over(partition by id order by anumber) = 1
order by id

这种写法简洁高效,自动排除了开窗函数生成的rn列,直接拿到mytable的全部字段。

方案2:将基表作为行类型嵌套查询

如果你的DB2版本较旧不支持QUALIFY,可以修改子查询,把整个t作为行对象返回,外层再提取该对象的所有列:

select tt.t.*
from (
    select t, row_number() over(partition by id order by anumber) rn 
    from mytable t 
    where option
) tt
where tt.rn = 1
order by tt.t.id

你之前尝试的tt.t.*无效,是因为原查询的子查询里用了t.*(直接展开所有列),而非把t作为整体行对象,所以外层没有可引用的嵌套t字段。

内容的提问来源于stack exchange,提问作者DB2fan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 21:40:21