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
相关产品推荐
相关产品推荐

