如何在MySQL中使用Coalesce

时间:2013-06-14 08:34:49

标签: mysql coalesce

这里有点帮助。我真的不明白如何在MySQL中使用这个合并

我已阅读google结果中how to use coalsece的第1页结果中的所有页面。

我知道它的意思是它返回它遇到的第一个非null值,否则返回null。

但它对我来说仍然含糊不清。

  1. 为什么我看到返回多个值的查询?它不仅仅是返回的第一个非空值吗?
  2. 它如何决定基于哪一列? coalesce(column1,column2)?如果第一列为空且其他列不为空,该怎么办?
  3. 或者,如果我错了或我的语法错误,我该怎么写呢?
  4. 有人可以就如何使用它提供一个非常好的简单示例吗?
  5. 当需要使用时。

4 个答案:

答案 0 :(得分:35)

  1.   

    为什么我看到返回多个值的查询?是不是只返回了第一个非空值?

    是的,它只是返回的第一个非NULL值。你必须误解你所看到的那些你认为不是这样的问题:如果你能告诉我们一个例子,我们或许可以帮助澄清误解。

  2.   

    它如何决定基于哪一列?合并(列1,列2)?如果第一列为null而其他列不为空,该怎么办?

    按照其参数的顺序:在此示例中,column1之前column2

  3.   

    或者如果我错了或我的语法错了,我该怎么写呢?

    你没错。

  4.   

    有人可以提供一个关于如何使用它的非常好的简单示例吗?

    取自the documentation

    
    mysql> SELECT COALESCE(NULL,1);
            -> 1
    mysql> SELECT COALESCE(NULL,NULL,NULL);
            -> NULL
    
  5.   

    当需要使用时。

    每当希望从列表中选择第一个非NULL值时,都希望使用。

答案 1 :(得分:25)

当我想从优先级列表中找到第一列非空白时,我个人使用coalesce。

比如说我想从客户表中获取一个电话号码,他们有3列名为mobile,home和work的电话号码,但我只想检索第一个非空白的号码。

在这种情况下,我拥有移动设备的优先权,然后回家然后工作。

TABLE STRUCTURE
--------------------------------------------
| id | customername | mobile | home | work |
--------------------------------------------
| 1  | Joe          | 123    | 456  | 789  |
--------------------------------------------
| 2  | Jane         |        | 654  | 987  |
--------------------------------------------
| 3  | John         |        |      | 321  |
--------------------------------------------

SELECT id, customername, COALESCE(mobile, home, work) AS phone FROM customers

RESULT
------------------------------
| id | customername | phone  |
------------------------------
| 1  | Joe          | 123    |
------------------------------
| 2  | Jane         | 654    |
------------------------------
| 3  | John         | 321    |
------------------------------

答案 2 :(得分:3)

COALESCE将返回第一个非空列或值。

示例用法:

SELECT COALESCE(my_column, my_other_column, 'default') as username FROM my_table;

示例结果:

my_column  my_other_column     results
null       null                'default'
null       0                   '0'
null       'jimmy'             'jimmy'
'bob'      'jimmy'             'bob'

答案 3 :(得分:0)

这是Coalesce的一个完美示例,如果将空字段/列更改为您希望它们从null到0和1的情况。将其复制到mysql编辑器中它看起来会好很多

选择" Column1(不想触摸)",coalesce(column2(如果为null则设置为0),0)为column2(给它的名称与例如" column2& #34;),coalesce(column3(而不是null设置为1),1)as column3(给它的名称与例如" column3")
来自" MydataTable"在哪里' somedates' (' 2015-04-10',' 2015-04-03',' 2015-03-27',' 2015-04-17& #39;)和id = 10的顺序由某些日期';

组成