【问题标题】:How to insert values into the rows of a newly added column of a table in PostgreSQL如何将值插入到 PostgreSQL 中表的新添加列的行中
【发布时间】:2016-09-26 17:09:30
【问题描述】:

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

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

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

提前致谢,我们将不胜感激。

芭芭拉

【问题讨论】:

  • 你怎么知道哪一行应该得到哪个province_id值?
  • 穆,你是对的,那是我使用 INSERT 的错误。但是我也尝试使用 UPDATE 并且没有填充任何行。借助 Igor 和 Konstantin 的提示,我现在已经解决了这个问题。

标签: sql postgresql postgresql-9.2


【解决方案1】:

首先 - 在“district”表中,您必须选择一个列,该列对于“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's 或者写类似的东西:

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

【讨论】:

  • 非常感谢伊戈尔,您实际上帮助我更进一步。我真的,真的很感激。
猜你喜欢
  • 1970-01-01
  • 2019-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-03
  • 2020-03-31
相关资源
最近更新 更多