用计算值更新psql表

时间:2018-08-22 11:29:30

标签: sql postgresql sql-update

表A:

id | dob 

表B:

id | type

我想根据A.dob来计算年龄,并基于此来更新B.type,我尝试了以下方法,但这给了我一个错误。

UPDATE B
SET     B.type   =  CASE  
                        WHEN AGE <= 16 THEN 'C' 
                        WHEN AGE>25 and age<=40 THEN 'Y' 
                        WHEN AGE>40 THEN 'O' 
                    END 

from AGE as ( EXTRACT(YEAR FROM age(now(),A.dob)) ), A inner join B on A.id=B.id 
where A.dob is not null;

1 个答案:

答案 0 :(得分:0)

尝试这样的事情:

update b
    set type = (case when age <= 16 then 'C' 
                     when age > 25 and age <= 40 then 'Y' 
                     when age > 40 then 'O' 
                end) 
from (select a.*, extact(year from age(now(), a.dob)) as age
      from a
     ) a
where a.id = b.id and a.age is not null;

注意:

  • 您的逻辑没有适合17至24岁的孩子。
  • 不要重复FROM子句中正在更新的表。那不是Postgres的工作方式。
  • JOIN条件---进入WHERE子句。
  • 这使用子查询来计算age
  • 我认为您还可以测试age不是NULL而不是基础列。