【问题标题】:Get case result field when select don't have rows选择没有行时获取案例结果字段
【发布时间】:2015-02-27 17:20:29
【问题描述】:

让我们更好地解释一下:

仅当某些条件为真时,我才需要更新表。

当条件为真时,更新发生,我取回更新后的字段和用返回键更新的行的 id。

问题是当条件不满足时,所以没有发生更新,我的结果集是空的...

您可以通过这些脚本进行模拟:

create table wn_liberacao (

  id serial not null primary key,
  data_inicial date,   
  data_final date,
  consulta_limite integer not null,   
  consulta_utilizada integer not null

);

insert into 
  wn_liberacao ( data_inicial, data_final, consulta_limite, consulta_utilizada )
        values ( '2015-01-01', '2020-12-31', 10, 0 );

所以,当你运行这个查询时:

with liberado as (

update wn_liberacao
   set consulta_utilizada = 1 + consulta_utilizada
  from ( select id from wn_liberacao where ( data_inicial <= current_date ) and ( data_final >= current_date ) and ( consulta_limite > consulta_utilizada )
--         and 1=2 
       ) liberacao
 where liberacao.id = wn_liberacao.id

returning wn_liberacao.id id_liberacao, wn_liberacao.consulta_limite, wn_liberacao.consulta_utilizada

) 

select 
  case liberado.id_liberacao
    when null then 'NOT' --0
    else 'YES' --1
  end liberou, liberado.*
  from liberado

此查询第一次运行的 10 次,我收到 YES....但第 11 次,结果为 nulll,没有数据行....

我需要11次之后,'liberou'字段的结果是'NOT',其他字段可以为空...

我该怎么做???

【问题讨论】:

  • 我更新了问题,因为我错过了( consulta_limite &gt; consulta_utilizada ) where 子句

标签: sql postgresql sql-update sql-returning


【解决方案1】:
select true as liberou, liberado.*
from liberado
union all
select false, null, null, null

order by liberou desc
limit 1

false 订单在true 之前,因此如果有 A 返回行,则将返回 'true' 行,否则将返回 false 行。

【讨论】:

    【解决方案2】:

    这个查询:

    with liberado as (
    
    update wn_liberacao wn
       set consulta_utilizada = 1 + consulta_utilizada
      from ( select id from wn_liberacao where ( data_inicial <= current_date ) and ( data_final >= current_date ) and ( consulta_limite > consulta_utilizada )
    --         and 1=2 
           ) liberacao
     where liberacao.id = wn.id
    
    returning wn.id id_liberacao, wn.consulta_limite, wn.consulta_utilizada
    
    ) 
    
    select 1 as liberou, liberado.*
    from liberado
    union all
    select 0, null, null, null
    
    order by liberou desc
    limit 1
    

    解决了我的问题...感谢Clodoaldo Neto

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-16
      • 1970-01-01
      • 2022-07-17
      • 1970-01-01
      • 2019-10-01
      相关资源
      最近更新 更多