首页 > 解决方案 > 如何省略 SQL 中特定行的列?

问题描述

举个例子:

select 
    pre, sze, fdm_pre, val
from 
    form_data_stage
where 
    fdm_pre in (1,2,3,4) 
order by 
    pre;

这将为列出的任何 fdm_pre 值(即 (1,2,3,4))返回所有列preszefdm_pre的值。val但是,我只关心 1 时的preandsizefdm_pre

我可以写一个查询,例如

select 
    case when fdm_pre = 1 then pre else null end as pre, 
    case when fdm_pre = 1 then sze else null end as sze,
    fdm_pre,
    val
from 
    form_data_stage 
where 
    fdm_pre in (1,2,3,4) 
order by 
    pre;

但是,有一些标准的方法来处理这种情况吗?即使不使用它们,返回所有列通常更有效吗?或者,在第二个查询中进行一些条件检查会更好吗?和presze是整数值。

标签: sqlquery-optimization

解决方案


在未使用时返回所有列效率不高,特别是如果未使用的列的大小很大(BLOBCLOBTEXTARRAY等)。

在您的特定示例中,“未返回”列是小列(以字节为单位),因此如果您生成空值并不重要。


推荐阅读