[英]Update binary column based on integer column - Postgres
我有一些带有二进制列 fish_otolith 的遗留数据,这是不准确的。 它应该基于名为 fish_age 的单独列进行指示。 当 fish_age 列中存在年龄时,二进制列 fish_otolith 应指示,而当 fish_age 列中存在空值时,二进制列 fish_otolith 不应指示。
鱼耳石 | 鱼龄 |
---|---|
1 | 10 |
1 | 2 |
0 | 无效的 |
1 | 无效的 |
1 | 无效的 |
我正在努力编写正确的更新sql语句“如果fish_age不是Null,则fish_otolith等于1,否则如果fish为null,则fish_otolith等于0
如果您的fish_otolith
是布尔值,请尝试以下操作:
update ttable
set fish_otolith = fish_age is not null;
表达式fish_age is not null
返回一个布尔值,可以将其转换为整数,结果为false -> 0
和true -> 1
,这就是您要查找的结果。 所以:
update fishes
set fish_otolith = (fish_age is not null)::integer;
然而,这个(或任何其他更新)包含一个潜在的致命缺陷: fish_otolith
可以独立于fish_age
进行更新,并且可以包含任何有效的整数,而不仅仅是 0 或 1。这个问题可以通过轻微的设计更改来克服。 将fish_otolith
定义为从fish_age
派生的generated always ...
(参见这里的演示- 两种实现)。
注意:@MikeOrganek 的任一设置也可以。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.