如何将值插入PostgreSQL中新添加的列的行中

时间:2012-11-19 06:56:17

标签: sql postgresql postgresql-9.2

我将个人地理数据库导入PostgreSQL。对于我的一个表,我添加了一个新列。此列为空,我想在此列中添加/插入值,以便填充其所有行。我用的时候:

INSERT INTO district (province_id) VALUES
('13'), ('13'), ('13'), ('13'), ('13'),  ('13'), ('12'), ('12'), ('12'), ('12'), ('12'), ('12'), ('12'), ('12'), ('12'), ('19'), ('19');

结果就是创建了新行,所以不是有17行,而是最后有34行。当我尝试使用UPDATE ... Set ... = ... Where ....时,查询成功运行,但是没有行受到影响。我现在的问题是:如何为新创建的列中的每一行添加值,以便不会创建新行?

提前致谢,非常感谢任何帮助。

Barbaara

1 个答案:

答案 0 :(得分:4)

首先 - 在表“区”中你必须选择一个列,这对于“区”中的每个记录都是唯一的(主键。我猜它叫做“district_id”)。

然后对于每个“district_id”,你需要设置“province_id”:

UPDATE district 
SET province_id = 13 -- put your province_id value here
WHERE district_id = 1234; -- put the key value here

它将在“district”中搜索“district_id”= 1234的记录,并将其“province_id”设置为13。

接下来,您必须为每个区写下这样的UPDATE或写下类似的内容:

WITH vals(district_id numeric, province_id numeric) as 
(    VALUES((1234,13), -- pairs of district_id , province_id
            (1235,13),
            (1236,13),
            ........)  -- write the pair for every district
)
UPDATE district as dist
SET province_id = vals.province_id
FROM vals
WHERE dist.district_id = vals.district_id