我在here上发现了这个面试问题。给定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()编写相同的查询,因为如前所述,here COALESCE()只返回第一个non-null值。
发布于 2018-07-31 08:48:27
在给定的情况下,您可以通过替换函数名来简单地将isnull()替换为coalesce()。
如果isnull(referredby, 0)为空,则referredby返回0,否则返回referredby。如果referredby为null,0是第一个not null表达式,如果referredby is not null,则referredby是第一个not null表达式并返回。
实际上,isnull()和coalesce()之间的唯一区别是isnull()只能接受两个表达式,而coalesce()需要两个或更多。使用isnull()时,如果有两个以上的表达式,则需要嵌套调用。
https://stackoverflow.com/questions/51604027
复制相似问题