使用IF / ELSE语句在SELECT上进行PostgreSQL UPDATE触发器

时间:2018-09-17 16:39:52

标签: sql postgresql if-statement sql-update

我想做的是每更新.off()时更新t1。但是,我需要使用表t2来加入它们,这意味着我需要一个子查询。当满足一个条件时,我可以成功更新t3;但是,当涉及到多个条件时,我很难理解用于更新的语法-本质上,我在组合postgresql t1UPDATE和子查询时遇到了麻烦。我正在寻找符合以下条件的东西:

IF/ELSEIF/ELSE

2 个答案:

答案 0 :(得分:1)

如果在更新中用case语句替换其他内容,它将解决您遇到的问题。

update t1
        set t1.current_location =   CASE  
                                    WHEN SUBQUERY.status = 0 THEN 'Deployed' 
                                    WHEN SUBQUERY.status = 1 THEN 'Retrieved' 
                                    WHEN SUBQUERY.status = 2 THEN 'Lost' 
                                    ELSE t1.current_location
                                END 
from (
    select t3.serial_number, t2.status
    from t2 inner join t3
        on t2.some_id = t3.some_id
    ) as SUBQUERY

where SUBQUERY.serial_number = t1.serial_number;

答案 1 :(得分:1)

此查询应满足您的要求:

update t1 
  set current_location = 
    case t2.status
        when 0 then 'Deployed'
        when 1 then 'Retrieved'
        when 2 then 'Lost'
    end
from t2 inner join t3
   on t2.some_id = t3.some_id
where t3.serial_number = t1.serial_number;