以下是我的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"
答案 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_id4
,unit_id3
,unit_id2
,unit_id1
,如果这些列中的任何一列按此顺序不是NULL
。 COALESCE
函数适用于此用例。如果所有四列都是NULL
,则UPDATE
中的逻辑只是将相同的值分配回unit_id
。我的查询中的WHERE
子句会阻止UPDATE
在所有四个单位列都为NULL
的记录上运行,因此永远不会浪费任何精力。