使用coalesce()

xfyts7mz  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(385)

我从这里找到了这个面试问题。考虑到customers表的这些内容:

|---------------------|------------------|------------------|
|         Id          |     Name         |    ReferredBy    |
|---------------------|------------------|------------------|
|          1          |     John Doe     |      NULL        |
|---------------------|------------------|------------------|
|          2          |    Jane Smith    |      NULL        |
|---------------------|------------------|------------------|
|          3          |    Anne Jenkins  |      2           |
|---------------------|------------------|------------------|
|          4          |    Eric Branford |      NULL        |
|---------------------|------------------|------------------|
|          5          |    Pat Richards  |      1           |
|---------------------|------------------|------------------|
|          6          |    Alice Barnes  |      2           |
|---------------------|------------------|------------------|

以下是一个用于返回jane smith未提及的客户列表的查询:

SELECT Name FROM Customers WHERE ReferredBy <> 2;

查询的结果是什么?为什么?有什么更好的写作方法吗?网站上提到的答案是:

SELECT Name FROM Customers WHERE ISNULL(ReferredBy, 0) <> 2;

我的问题是如何使用 COALESCE() ,因为正如这里提到的 COALESCE() 只返回第一个 non-null 价值观。

i7uaboj4

i7uaboj41#

在给定的情况下,您可以简单地替换 isnull()coalesce() 通过替换函数名。 isnull(referredby, 0) 退货 0 如果 referredby 否则为空 referredby . 我也是 coalesce(referredby, 0) 犹如 referredby 为空, 0 是第一个非空表达式,如果 referredby 不为空 referredby 是第一个非空表达式并返回。
实际上 isnull() 以及 coalesce() 是吗 isnull() 只能取两个表达式 coalesce() 需要两个或更多。使用 isnull() 如果有两个以上的表达式,则需要嵌套调用。

相关问题