所以我在看这个question我试图弄清楚是否正确使用了合并作为答案。
INSERT INTO users (user_id, name)
SELECT 1 + coalesce((SELECT max(user_id) FROM users WHERE name='Bob'), 0), 'Bob';
如果这是问这个问题的错误方式,我深表歉意,但我没有足够的代表来评论那个 5 年前的帖子。我的困惑来自于在这个答案中使用合并。如果我的理解正确的话,Coalesce 会比较两个或更多列并从中获取第一个非空值。
该用户的问题是,如果值“Bob”不存在,那么他的 user_id 字段在插入时将为 0,这是他不希望看到的,因为它需要从 1 开始。
那么,我是否正确地理解合并,认为这里根本不需要合并,因为即使在答案中,他也简单地为第二个参数设置了 0。看起来这个例子中的 Coalesce 没有产生任何结果,真正的主力是“Select 1 + Select max()”。
我只是想理解合并的概念,因为我遇到了这个作为我遇到的问题的例子。
最佳答案
查询:
SELECT max(user_id) FROM users WHERE name='Bob'
如果没有“Bob”,将返回NULL
。
因此,在这种情况下,COALESCE()
用于返回 0
而不是 NULL
,然后加 1 以获取下一个(如果存在)是“Bob”,如果没有,则为 1
。
您关于 COALESCE()
从值列表中获取第一个非空值的说法是正确的。
关于mysql - 合并使用困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26894057/