Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
处理NULL+1的SQL合并_Sql_Postgresql - Fatal编程技术网

处理NULL+1的SQL合并

处理NULL+1的SQL合并,sql,postgresql,Sql,Postgresql,我在PostgreSQL中有一个包含2个字段的用户表: ID int | |名称文本 当我向表中插入新用户时,表应该将他的ID设置为ID列表中的下一个索引,即如果列表中的ID是:1、2、3 将添加的下一个用户将被分配ID=4 为此,我在表中获取max ID值并递增,问题是如果表为空,max函数返回null,为了处理这个问题,我决定使用COALESCE,如下所示: INSERT INTO users VALUES COALESCE(0,(SELECT MAX(id) FROM users) + 1

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

ID int | |名称文本

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

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

INSERT INTO users VALUES COALESCE(0,(SELECT MAX(id) FROM users) + 1), 'Smith');
在MAX函数返回空值的情况下,该函数将设置为0

问题是,虽然SELECT MAXid FROM USERS返回空值,但当我添加+1时,它会给出一个错误


这怎么能解决呢?我打算将其保存在一个查询中。

这些值是向后的,并且在值中缺少括号。我认为编写这样一个查询的简单方法是使用insert。选择:

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


然而,正确的方法是将id定义为serial,如下所述。然后,数据库维护id列。

值是向后的,并且值中缺少括号。我认为编写这样一个查询的简单方法是使用insert。选择:

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


然而,正确的方法是将id定义为serial,如下所述。然后,数据库维护id列。

交换外观顺序

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

交换出场顺序

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

它是从用户中选择MAXid,如果表为空,0+1不是会放1吗?我希望ID从0开始。请检查@gordon的答案。@jarlh mysql标记是因为COALESCE可以在mysql中使用,我假设了解mysql查询的人可以提供帮助,以及正在寻找postgre或mysql帮助的程序员几乎所有dbms都支持COALESCE ANSI SQL函数。。。不要给没有直接参与的产品贴标签!它是从用户中选择MAXid,如果表为空,0+1不是会放1吗?我希望ID从0开始。请检查@gordon的答案。@jarlh mysql标记是因为COALESCE可以在mysql中使用,我假设了解mysql查询的人可以提供帮助,以及正在寻找postgre或mysql帮助的程序员几乎所有dbms都支持COALESCE ANSI SQL函数。。。不要给没有直接参与的产品贴标签!这没有多大帮助,因为我希望ID从0开始。@wannabeprogrammer。我只是看到了那条评论并修复了代码。通常,此类ID从1开始,而不是从0开始;没有特别的原因,但这就是序列、标识、自动增量值和序列在各种数据库中的默认工作方式,所有这些都可以重写为从0.0开始。我的错误是COALESCE函数中参数的顺序?这没有多大帮助,因为我希望ID从0开始。@wannabeprogrammer。我只是看到了那条评论并修复了代码。通常,此类ID从1开始,而不是从0开始;没有特别的原因,但这就是序列、标识、自动增量值和序列在各种数据库中的默认工作方式,所有这些都可以重写为从0.0开始。我的错误是聚合函数中参数的顺序?