首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在PostgreSQL中更新多行的某些列

如何在PostgreSQL中更新多行的某些列
EN

Stack Overflow用户
提问于 2019-07-16 07:27:06
回答 1查看 42关注 0票数 0

我有一个名为Configuration的表。表的第一列是deviceId,第二列是参数,第三列是值。

在表中,有许多设备,每个设备只有一个设备ID(第1列);每个设备都有许多配置参数(第2列),例如:VER、DATE、COMPANY等,所有设备都有相同的配置参数;不同设备的参数值(第3列)可能相同,也可能不同。

我想为ID等于"id12345“的设备更新两个配置参数,即VER和DATE,并使用新参数的值(第3列)。

如何在一个PostgreSQL查询中实现这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-16 07:40:48

这就是你可以做的,尽管我不认为这是一个很棒的想法。

代码语言:javascript
复制
UPDATE configuration
    SET value = 
        CASE parameter 
            WHEN 'VER' THEN new_ver_value
            WHEN 'DATE' THEN new_date_value
        END
    WHERE deviceid = 'id12345';

像这样的参数表通常被认为是一个坏主意,因为这个查询的复杂性有助于说明这一点。此外,由于您说所有的设备都有相同的参数,所以这样做而不是为每个参数都有一个唯一的列似乎不会实现任何有用的结果。

此外,如果可能,只使用数字作为设备if,而不是字符串。

根据请求,要更新额外的字段,如设置为current_time的时间字段,可以执行以下操作。

代码语言:javascript
复制
UPDATE configuration
    SET value = 
        CASE parameter 
            WHEN 'VER' THEN new_ver_value
            WHEN 'DATE' THEN new_date_value
        END,
        time = current_time
    WHERE deviceid = 'id12345'
        AND parameter IN ('VER', 'DATE');

对于第一个查询,下面是一个显示结果的测试。

代码语言:javascript
复制
CREATE TABLE configuration 
   (deviceid CHARACTER VARYING (20),
    parameter CHARACTER VARYING (10),
    VALUE integer);

INSERT INTO configuration
(VALUES ('id12345', 'VER', 1),
        ('id12345', 'DATE', 20190101),
        ('id12345', 'COMPANY', 55),
        ('id33333', 'VER', 2),
        ('id33333', 'DATE', 20180101),
        ('id33333', 'COMPANY', 6));

SELECT * FROM configuration;

id12345    VER     1
id1234     DATE    20190101
id12345    COMPANY 55
id33333    VER     2
id33333    DATE    20180101
id33333    COMPANY 6

UPDATE configuration
    SET value = 
        CASE parameter 
            WHEN 'VER' THEN 11
            WHEN 'DATE' THEN 2020010
        END
    WHERE deviceid = 'id12345'
        AND parameter IN ('VER', 'DATE');

SELECT * FROM configuration;

id12345   COMPANY   55
id33333   VER       2
id33333   DATE      20180101
id33333   COMPANY   6
id12345   VER       11
id12345   DATE      2020010
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57048264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档