POSTGRESQL - 选择更新和条件

时间:2018-04-12 12:14:37

标签: sql postgresql sql-update dml

我需要用两个字段更新PSQL表。第一个字段需要从表中复制字段,而另一个字段需要是字符串。

我不知道怎么做到的。这是我想要做的一个例子:

如果记录的列“custom_t4”为空且列“parent_id”等于0,请将值替换为“Dossier_client”值。 如果记录的列“custom_t15”为空,请将其替换为“folder_id”值

这是一个例子: 如果我有这个:

╔═══════════╤═══════════╤═══════════╤════════════╗
║ folder_id │ parent_id │ custom_t4 │ custom_t15 ║
╠═══════════╪═══════════╪═══════════╪════════════╣
║ 123456    │ 0         │           │            ║
╚═══════════╧═══════════╧═══════════╧════════════╝

我需要这样的事情:

╔═══════════╤═══════════╤════════════════╤════════════╗
║ folder_id │ parent_id │ custom_t4      │ custom_t15 ║
╠═══════════╪═══════════╪════════════════╪════════════╣
║ 123456    │ 0         │ Dossier_client │ 123456     ║
╚═══════════╧═══════════╧════════════════╧════════════╝

现在我尝试此查询,仅针对'custom_t4'字段。它工作正常,但我不知道怎么做custom_t15:

UPDATE folders SET custom_t4 = 'Dossier_client' WHERE parent_id = 0;

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

您可以使用CASE声明尝试此更新。我假设custom_t15folder_id属于同一类型,否则您可能需要适当地投射(::)。

UPDATE folders
SET custom_t4 = CASE 
        WHEN custom_t4 IS NULL
            AND parent_id = 0
            THEN 'Dossier_client'
        ELSE custom_t4
        END
    ,custom_t15 = COALESCE(custom_t15, folder_id)
  -- DON'T forget a valid where clause;

Demo