gpt4 book ai didi

SQL COALESCE 处理 NULL + 1

转载 作者:行者123 更新时间:2023-11-29 14:10:43 24 4
gpt4 key购买 nike

我在 PostgreSQL 中有一个包含 2 个字段的用户表:

ID(整数)||姓名(文字)

当我向表中插入一个新用户时,表应该将他的 ID 设置为 ID 列表中的下一个索引,即如果列表中的 ID 为:1、2、3将添加的下一个用户将分配 ID = 4。

为此,我在表中获取最大 ID 值并递增它,问题是如果表为空,MAX 函数返回 null,为了处理这个问题 - 我决定使用 COALESCE 作为如下:

INSERT INTO users VALUES COALESCE(0,(SELECT MAX(id) FROM users) + 1), 'Smith');

如果从 MAX 函数返回 NULL 值,则将其设为 0。

问题是,虽然 SELECT MAX(id) FROM USERS 确实返回了 NULL 值,但当我添加 +1 时它给出了一个错误。

如何解决?我打算将其保留在一个查询中。

最佳答案

值是向后的(并且您在 VALUES() 中缺少括号。我认为编写此类查询的更简单方法是使用 insert . . . select:

INSERT INTO users(id, Name)
SELECT COALESCE(MAX(id) + 1, 0), 'Smith'
FROM users;

注意:您应该在执行插入时列出所有列。当您使用 SQL 时,它将防止难以发现的错误。

但是,正确的方法是将 id 定义为 serial,这在 here 中有描述。 .然后,数据库维护id列。

关于SQL COALESCE 处理 NULL + 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34268078/

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