gpt4 book ai didi

sql - 在 INSERT/UPDATE 语句中使用 DEFAULT 与 CASE

转载 作者:行者123 更新时间:2023-11-29 12:12:40 26 4
gpt4 key购买 nike

我有一列设置了默认值。像这样的 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小号:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com