40

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

how to use coalsece我已经阅读了谷歌结果的第 1 页结果中的所有页面。

我知道它的含义,它返回它遇到的第一个非空值,否则返回 null。

但对我来说仍然很模糊。

  1. 我怎么会看到返回多个值的查询?不只是返回的第一个非空值吗?
  2. 它如何决定以哪一列为基础?coalesce(column1,column2)? 如果第一列为空而另一列不为空怎么办?
  3. 或者,如果我错了或我的语法错误,我该如何正确地编写它?
  4. 有人可以提供一个非常好的简单示例来说明如何使用它吗?
  5. 并在需要时使用。
4

4 回答 4

41
  1. 我怎么会看到返回多个值的查询?不只是返回的第一个非空值吗?

    是的,它只是返回的第一个非 NULL 值。对于您认为不是这种情况的查询,您一定是误会了:如果您可以向我们展示一个示例,我们也许可以帮助澄清误解。

  2. 它如何决定以哪一列为基础?合并(列 1,列 2)?如果第一列为空而另一列不为空怎么办?

    按照它的参数顺序:在这个例子中,column1之前column2

  3. 或者如果我错了或我的语法错误,我该如何正确地写它?

    你没有错。

  4. 有人可以提供一个非常好的简单示例来说明如何使用它吗?

    取自文档

    
    mysql> SELECT COALESCE(NULL,1);
            -> 1
    mysql> SELECT COALESCE(NULL,NULL,NULL);
            -> NULL
    
  5. 并在需要时使用。

    无论何时希望从列表中选择第一个非 NULL 值,都需要使用它。

于 2013-06-14T09:07:37.827 回答
38

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

例如,我想从客户表中获取一个电话号码,他们有 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    |
------------------------------
于 2017-02-03T11:19:41.627 回答
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'
于 2017-03-03T15:45:49.427 回答
0

这是Coalesceif 将null字段/列更改为您希望它们从nullto0和的情况下的完美示例1

将其复制到mysql编辑器中,它看起来会好很多

Select "Column1 (Dont Want Touched)", 
  coalesce(column2(That you want set to 0 if null), 0) as column2 /* (give it same name as was e.g. "column2") */, 
  coalesce(column3(Instead of null set to 1) ,1) as column3 /* (give it same name as was e.g. "column3") */ 
from "MydataTable" 
Where 'somedates' in ('2015-04-10', '2015-04-03', '2015-03-27', '2015-04-17')  and id = 10 order by 'somedates';
于 2015-04-21T09:21:03.813 回答