2016-02-25 32 views
0

添加新列后,是否可以仅使用一个查询插入该列的值?一次为每列插入不同的值

表:

id | category | level | new_column_name 
---+-------------+-------+---------------- 
1 | Character |  3 | 
2 | Character |  2 | 
3 | Character |  2 | 
4 | Character |  5 | 

我需要做的是这样

INSERT INTO table_name 
    (new_column_name) 
VALUES 
    ('foo'), -- value for new_column_name : row1 
    ('bar'), -- value for new_column_name : row2 
    ... 
; 

我已经习惯使用PostgreSQL CLI以便插入值类似的查询,但它失败becauase用途null为未设置的列值,其中一个(id)为PRIMARY_KEY,因此它不能为NULL。

这是记录错误:

ERROR: null value in column "id" violates not-null constraint 
DETAIL: Failing row contains (null, null, null, 1359). 

编辑:

我在做什么是一个多插入的更新,但我将能够做的是插入所有不同的值一次。

举例来说,如果可能的话,我会避免这样做:

UPDATE table_name 
SET new_column_name = 'foo' 
WHERE id = 1; 

UPDATE table_name 
SET new_column_name = 'bar', 
WHERE id = 2; 

--... 
+1

听起来像你正在尝试'更新'而不是'插入'也许? – sgeddes

+0

@sgeddes是更多,但我想这样做,如果可能的话,无需使用update命令的where子句。我忘了在我的问题中补充说,对不起。 – fbid

回答

1

您可以使用VALUES从而构建一个在线表包含的值要更新。:

UPDATE table_name AS v 
SET new_column_name = s.val 
FROM (VALUES (1, 'foo'), (2, 'bar')) AS s(id, val) 
WHERE v.id = s.id 

Demo here

1

您可以使用一个巨大的CASE

UPDATE table_name 
SET new_column_name 
    = CASE WHEN id = 1 THEN 'foo' 
      WHEN id = 2 THEN 'bar' 
    END; 
相关问题