我从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/