我有一列设置了默认值。像这样的 UPDATE
语句将按预期工作:
UPDATE some_table SET
some_column = DEFAULT
WHERE id = 1;
但是,当我尝试使用这样的条件时,我在 DEFAULT
附近遇到语法错误:
UPDATE some_table SET
some_column = CASE
WHEN TRUE THEN DEFAULT
ELSE 'foo'
END
WHERE id = 1;
有没有有效的方法来达到预期的结果?
最佳答案
你不能那样做。您可以使用表达式或DEFAULT
关键字。
SET { column = { expression | DEFAULT } | ... }
However, you can split your query into 2 updates:
UPDATE some_table
SET some_column = DEFAULT
WHERE id = 1 AND some_condition;
UPDATE some_table
SET some_column = 'foo'
WHERE id = 1 AND NOT some_condition;
这将进行所需的更改。如果您确实想在一个查询中完成此操作,可以使用 CTE s:
WITH upd1 AS (
UPDATE some_table
SET some_column = DEFAULT
WHERE id = 1 AND some_condition
RETURNING *
),
upd2 AS (
UPDATE some_table
SET some_column = 'foo'
WHERE id = 1
RETURNING *
)
SELECT * FROM upd1
UNION ALL
SELECT * FROM upd2
注意:有意跳过AND NOT some_condition
。最后一个 CTE 可以与 CASE
表达式中的 ELSE
分支完全相同,因为如果您使用多个数据修改 CTE,maximum one of them can affect every row在一个表中。
关于sql - 在 INSERT/UPDATE 语句中使用 DEFAULT 与 CASE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24505440/