所以我看着这个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的概念,因为我遇到了这个问题,作为我遇到的问题的一个例子。
答案 0 :(得分:1)
查询:
SELECT max(user_id) FROM users WHERE name='Bob'
如果没有' Bob'将返回NULL
。
在这种情况下,COALESCE()
用于返回0
而不是NULL
,然后加上1以获得下一个,如果有一个' Bob',如果没有,请1
COALESCE()
从值列表中获取第一个非空值是正确的。