sql - Postgres 循环更新记录

标签 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 

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

我试过了;

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

最佳答案

无需循环。 Postgres 允许在 UPDATE 语句中连接两个表:

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

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

关于sql - Postgres 循环更新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51483440/

相关文章:

php - 如何将 PHP 表格下载到 CSV 文件中

python - Heroku + Django migrate 命令不会创建任何表

sql - 同时创建唯一索引超时

SQL LEFT JOIN 清空左表列

string - 使用 hive/impala 或其他方式通过子字符串连接大表的有效方法

sql - 如何在 zend 框架中使用子查询执行查询

sql - 匹配字符串中的 2 个字符 - SQL

sql检查连接表是否有多个条件的行

mysql - 使用 group by 对两个表进行排序

sql - 如何从另一个表中获取列的计数