"logit" 列中的空值违反了非空约束
Null value in column "logit" violates not-null constraint
我正在使用 Greenplum(基于 PostgreSQL 8.2.15)和我的更新命令:
update table01
set logit=
case
when sex = '03' then
logit+0.5*0.8
when sex = '@0' then
logit+0.5*0.2
when sex = '02' then
logit+0.5*0.4
when sex = 'N' then
logit+0.5*(-1.6)
when sex = '01' then
logit+0.5*(-0.4)
end;
它给我一个错误:
null value in column "logit" violates not-null constraint
"logit"
列类型为双精度,除sex = 'N'
returns无行外,其他条件有。
我已经检查了有关此错误的其他答案,但尚未获得帮助。为什么会发生这种情况以及如何解决?
你 CASE
expression 没有 ELSE
分支来捕捉其他一切。缺失时默认为NULL。
将 ELSE
分支添加到 CASE
以修复它。
或者 UPDATE
的 WHERE
子句只更新不会变为 NULL 的行。
您想要设置 update
以匹配具有以下值的 case
语句:
update table01
set logit = (case when sex = '03' then logit+0.5*0.8
when sex = '@0' then logit+0.5*0.2
when sex = '02' then logit+0.5*0.4
when sex = 'N' then logit+0.5*(-1.6)
when sex = '01' then logit+0.5*(-0.4)
end)
where sex in ('03', '@0', '02', 'N', '1');
或者,您可以在 set
:
中明确保持值相同
update table01
set logit = (case when sex = '03' then logit+0.5*0.8
when sex = '@0' then logit+0.5*0.2
when sex = '02' then logit+0.5*0.4
when sex = 'N' then logit+0.5*(-1.6)
when sex = '01' then logit+0.5*(-0.4)
else logic
end);
第一个版本效率更高。第二种更容易维护。
我正在使用 Greenplum(基于 PostgreSQL 8.2.15)和我的更新命令:
update table01
set logit=
case
when sex = '03' then
logit+0.5*0.8
when sex = '@0' then
logit+0.5*0.2
when sex = '02' then
logit+0.5*0.4
when sex = 'N' then
logit+0.5*(-1.6)
when sex = '01' then
logit+0.5*(-0.4)
end;
它给我一个错误:
null value in column "logit" violates not-null constraint
"logit"
列类型为双精度,除sex = 'N'
returns无行外,其他条件有。
我已经检查了有关此错误的其他答案,但尚未获得帮助。为什么会发生这种情况以及如何解决?
你 CASE
expression 没有 ELSE
分支来捕捉其他一切。缺失时默认为NULL。
将 ELSE
分支添加到 CASE
以修复它。
或者 UPDATE
的 WHERE
子句只更新不会变为 NULL 的行。
您想要设置 update
以匹配具有以下值的 case
语句:
update table01
set logit = (case when sex = '03' then logit+0.5*0.8
when sex = '@0' then logit+0.5*0.2
when sex = '02' then logit+0.5*0.4
when sex = 'N' then logit+0.5*(-1.6)
when sex = '01' then logit+0.5*(-0.4)
end)
where sex in ('03', '@0', '02', 'N', '1');
或者,您可以在 set
:
update table01
set logit = (case when sex = '03' then logit+0.5*0.8
when sex = '@0' then logit+0.5*0.2
when sex = '02' then logit+0.5*0.4
when sex = 'N' then logit+0.5*(-1.6)
when sex = '01' then logit+0.5*(-0.4)
else logic
end);
第一个版本效率更高。第二种更容易维护。