Postgres更新记录循环

时间:2018-07-23 16:29:54

标签: sql postgresql join sql-update postgresql-9.1

我有一个Employee表,其中DEPTCODE为空。

ID        NAME        AGE        DEPTID      DEPTCODE        
----      ----------  -----      ----------  -------      
1         Paul        32         2                 
2         Allen       25         1 

还有一个Department表,如下所示:

ID        DEPTNAME    DEPTCODE     
----      ----------  -----      
1         HR          DEP-01         
2         ADMIN       DEP-02 

如何通过从DEPTCODE表中查询Employee来更新DEPTCODE表中的Department

我已经尝试过了

DO $$
BEGIN
FOR depart IN
        SELECT * FROM schema."Department"
    LOOP
        Update table schema."Employee" set "DEPTCODE"=depart."DEPTCODE"
          where "DEPTID"=depart."ID";
    END LOOP;
    END; $$

1 个答案:

答案 0 :(得分:3)

不需要循环。 Postgres允许在UPDATE语句中联接两个表:

update "Employee" e
  set "DEPTCODE"=depart."DEPTCODE"
from "Department" depart
where e."DEPTID"=depart."ID";

但是您不应该这样做。将数据副本存储在相关表中并不是一个好的数据库设计。始终可以通过将两个表结合在一起来获取该信息。