Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 列“中的空值”;罗吉特;违反非空约束_Sql_Case_Sqldatatypes_Greenplum - Fatal编程技术网

Sql 列“中的空值”;罗吉特;违反非空约束

Sql 列“中的空值”;罗吉特;违反非空约束,sql,case,sqldatatypes,greenplum,Sql,Case,Sqldatatypes,Greenplum,我正在使用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*(-

我正在使用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;
它给了我一个错误:

“logit”列中的null值违反NOTNULL约束

“logit”
列类型是双精度的,除
sex='N'
不返回行外,其他条件都有行


我已经检查了其他关于这个错误的答案,但是还没有得到帮助。为什么会发生这种情况,以及如何修复它?

您没有任何可以捕获其他一切的
分支。缺少时默认为NULL

ELSE
分支添加到
CASE
以修复它。

或者将
WHERE
子句添加到
UPDATE
中,以仅更新不会变为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');
或者,您可以在
集中显式保持值相同:

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);

第一个版本更有效。第二种更容易维持。

撇开它不说,绿梅根本就不是一种落后。