SQL脚本替换列的数据

时间:2012-07-31 15:05:23

标签: sql postgresql

我有一个PostgreSQL数据库,我想创建一个脚本,将表A的一列数据替换为其他表列的数据。我写过这个PL / PgSQL函数:

BEGIN;

    CREATE TEMPORARY TABLE tmp_table (id bigint PRIMARY KEY,
        registrationnumber character varying(255));
    INSERT INTO tmp_table
    select id,registrationnumber from tableB;

    for d in tmp_table loop
        update TABLEA set registrationnumber=d.id where 
            registrationnumber=d.registrationnumber;
        return next d;
    end loop;

END;

我的剧本出了什么问题?

1 个答案:

答案 0 :(得分:2)

没有理由在循环中执行此操作 - 让数据库引擎为您执行此操作。

 UPDATE tablea 
  SET registrationnumber = tableb.id
  FROM tableb
 WHERE tablea.registrationnumber = tableb.registrationnumber;

select * from tablea;

请参阅此SQLFiddle:

http://sqlfiddle.com/#!1/1281b/1

请注意,您隐式地将varchar值转换为bigint。如果这些varchar值中的任何一个未正确转换,则语句将失败