合并使用混乱

时间:2014-11-12 18:35:29

标签: mysql sql tsql concept

所以我看着这个question,我试图弄清楚Coalesce是否正确用于答案。

INSERT INTO users (user_id, name)
SELECT 1 + coalesce((SELECT max(user_id) FROM users WHERE name='Bob'), 0), 'Bob';

如果这是提出这个问题的错误方式,我很抱歉,但我没有足够的代表对这个5岁的帖子发表评论。我的困惑是在这个答案中使用Coalesce。如果我理解正确,Coalesce会比较两个或多个列并从中获取第一个NON Null值。

此用户的问题是,如果某个值不存在,'Bob',那么他的user_id字段在插入时将为0,这是他不想要的,因为它需要从1开始。

因此,我认为在这里根本不需要理解合并,因为即使在答案中他简单地为第二个参数设置了0。似乎Coalesce在这个例子中没有产生任何东西,真正的工作马是'Select 1 + Select max()'。

我再次尝试理解Coalesce的概念,因为我遇到了这个问题,作为我遇到的问题的一个例子。

1 个答案:

答案 0 :(得分:1)

查询:

SELECT max(user_id) FROM users WHERE name='Bob'

如果没有' Bob'将返回NULL

在这种情况下,COALESCE()用于返回0而不是NULL,然后加上1以获得下一个,如果有一个' Bob',如果没有,请1

COALESCE()从值列表中获取第一个非空值是正确的。