POSTGRESQL无法比较空列

时间:2016-07-25 07:13:33

标签: postgresql amazon-redshift

以下是我的SQL查询:

update table 
set unit_id = T1.unit_id_temp from
       (select case when unit_id4 is not null then unit_id4
        when unit_id3 is not null then unit_id3
        when unit_id2 is not null then unit_id2
        when unit_id1 is not null then unit_id1
        else unit_id
        end as unit_id_temp,
        unit_id1,unit_id2,unit_id3,unit_id4
        from   table)  T1
where table.unit_id4  = T1.unit_id4
and   table.unit_id3  = T1.unit_id3
and   table.unit_id2  = T1.unit_id2  
and   table.unit_id1  = T1.unit_id1 

从上面的查询中,当它们为NULL时,我无法比较列,因为条件返回false。

例如: 当unit_id4为null时,      table.unit_id4 = T1.unit_id4返回False。

因此,只要其中一列包含NULL值,我的更新就会失败。

我尝试使用并不明显,它不起作用。引发以下错误:

UPDATE - 0行,0.000秒] [代码:0,SQL状态:42601]错误:语法错误在或附近" distinct"

1 个答案:

答案 0 :(得分:3)

我认为您可以用以下内容替换整个查询:

UPDATE table
SET unit_id = COALESCE(unit_id4, unit_id3, unit_id2, unit_id1)
WHERE COALESCE(unit_id4, unit_id3, unit_id2, unit_id1) IS NOT NULL

在我看来,您的逻辑是将unit_id列更新为unit_id4unit_id3unit_id2unit_id1,如果这些列中的任何一列按此顺序不是NULLCOALESCE函数适用于此用例。如果所有四列都是NULL,则UPDATE中的逻辑只是将相同的值分配回unit_id。我的查询中的WHERE子句会阻止UPDATE在所有四个单位列都为NULL的记录上运行,因此永远不会浪费任何精力。