我需要用两个字段更新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;
任何帮助将不胜感激
答案 0 :(得分:0)
您可以使用CASE
声明尝试此更新。我假设custom_t15
和folder_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;