【问题标题】:Coalesce usage confusion合并使用混乱
【发布时间】:2014-11-12 18:35:29
【问题描述】:

所以我在看这个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 的概念,因为我遇到了这个问题作为我遇到的问题的示例。

【问题讨论】:

    标签: mysql sql tsql concept


    【解决方案1】:

    查询:

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

    如果没有“Bob”,将返回 NULL

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

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

    【讨论】:

    • 好的,所以 Coalesce(x,0) 中的 0 是比较值。在这种情况下使用 IFNULL() 代替 Coalesce 是否有利或不利。 Coalesce 似乎仍然被我误用了,但通过您的解释,我了解它现在是如何工作的。
    • COALESCE() 在所有主要数据库中,而IFNULL() 不在使用ISNULL() 的SQL Server 中。性能应该没有什么不同。
    猜你喜欢
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 2013-09-13
    • 1970-01-01
    • 2018-12-23
    相关资源
    最近更新 更多