POSTGRESQL - SELECT withing update and condition

POSTGRESQL - SELECT withing update and condition

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

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

如果记录的“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' 字段。它正在工作,但我不知道如何做 for custom_t15 :

UPDATE folders SET custom_t4 = 'Dossier_client' WHERE parent_id = 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