我从here找到了这个面试问题。鉴于客户表的这些内容:

|---------------------|------------------|------------------|
|         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()编写相同的查询,因为如上所述here COALESCE()仅返回第一个non-null值。

最佳答案

在给定的情况下,您可以通过替换函数名称来简单地将isnull()替换为coalesce()

如果isnull(referredby, 0)为null,则0返回referredby,否则referredby。同样,coalesce(referredby, 0)就像referredby为null,0是第一个非null表达式,如果referredby不为null,referredby是该第一个非null表达式并返回。

实际上,isnull()coalesce()之间的唯一区别是isnull()只能接受两个表达式,而coalesce()可以接受两个或更多。如果使用两个以上的表达式,则使用isnull()您需要嵌套调用。

关于mysql - 使用COALESCE(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51604027/

10-13 07:12