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_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;
我需要用两个字段更新 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_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;