mysql - 合并使用困惑

标签 mysql sql tsql concept

所以我在看这个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/

相关文章:

MySQL 到 Sqlite

sql - Oracle Select 语法到 Postgres

sql - 是否可以在 SQL Server 中的表上应用默认过滤器?

mysql - 我在 date_add 之间使用基于用户年龄的高级搜索,但取决于月份和年份不起作用

sql-server - 选择/插入更新插入的版本 : is there a design pattern for high concurrency?

sql - 具有多个 When 值的 TSQL case 语句?

php - 更新数据时获取特定行

mysql - mysql中如何合并多行数据

php - 如何建模与不同类型对象的关系

sql - PostgreSQL 按单个值过滤组