在case语句中插入

时间:2014-12-08 21:37:55

标签: sql postgresql

我有一个数据表,我决定要改变保存和提取数据的方式。这对我来说是一个糟糕的设计,现在我需要修复它而不需要手动遍历每一行。我想将主键从ItemID和VendorID更改为ItemID和Function。如果两个函数的供应商ID相同,我想为每个函数+ id而不是组合记录单独记录。我将取消使用other_functions列。

基本上我的表看起来像这样:

ItemID(PK)| VendorID(PK) |   Function   |   other_functions
_______________________________________________________
    1     |    23        |    cooking   |     
    1     |    36        |    cleaning  |
    2     |    45        |    cooking   |   cleaning

在我更新PK之后,我如何查看表格,并且对于other_functions ='cleaning'的每条记录,插入一个新行,使其看起来更像这样:

ItemID(PK)| VendorID     | Function(PK)   
______________________________________
    1     |    23        |    cooking     
    1     |    36        |    cleaning 
    2     |    45        |    cooking
    2     |    45        |    cleaning

我正在使用PostgreSQL。它似乎应该是一个简单的解决方案,但无法找到我正在寻找的答案。这可以只使用insert + case语句来完成吗?

1 个答案:

答案 0 :(得分:0)

  

只需插入+ case语句就可以完成吗?

CASE会使成为条件 - 在您的情况下,您希望使插入本身成为条件。更好的方法是插入具有other_functions值的记录:

INSERT INTO {table}
(ItemID, VendorId, Function)
(
SELECT ItemID, VendorId, other_functions
FROM {table}
WHERE other_functions IS NOT NULL
)