一次为每列插入不同的值

时间:2016-02-25 17:47:05

标签: sql postgresql

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

表格

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进行了类似的查询以插入值,但是因为未设置的列值使用null而失败,其中一个(id)是PRIMARY_KEY,所以它不能#t; t是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;

--...

2 个答案:

答案 0 :(得分:1)

您可以使用巨大的CASE

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

答案 1 :(得分: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