我从这里找到了这个面试问题。考虑到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
价值观。
1条答案
按热度按时间i7uaboj41#
在给定的情况下,您可以简单地替换
isnull()
与coalesce()
通过替换函数名。isnull(referredby, 0)
退货0
如果referredby
否则为空referredby
. 我也是coalesce(referredby, 0)
犹如referredby
为空,0
是第一个非空表达式,如果referredby
不为空referredby
是第一个非空表达式并返回。实际上
isnull()
以及coalesce()
是吗isnull()
只能取两个表达式coalesce()
需要两个或更多。使用isnull()
如果有两个以上的表达式,则需要嵌套调用。