如何在PostgreSQL中向表的新添加列的行插入值

3

我将个人地理数据库导入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

5
你如何知道应该给哪一行分配哪个province_id的值? - mu is too short
Mu,你是对的,我在使用INSERT时犯了错误。然而,我也尝试使用UPDATE,但没有行被填充。在Igor和Konstantin的提示下,我现在已经解决了这个问题。 - Barbara Lokes
1个回答

4

首先,在“district”表中,您必须选择一个对于每个记录都是唯一的列(主键)。我猜它被称为“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

1
非常感谢你,Igor。你实际上帮助了我更进一步。我真的非常感激。 - Barbara Lokes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接