使用COALESCE()

时间:2018-07-31 00:44:41

标签: mysql sql tsql

我从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值。

1 个答案:

答案 0 :(得分:2)

在给定的情况下,您可以通过替换函数名称来简单地将System.out.println(spanElement.text()); 替换为Document document = Jsoup.connect("https://www.lowes.com/pd/GE-700-sq-ft-Window-Air-Conditioner-115-Volt-14000-BTU-ENERGY-STAR/1000380463") .header("Cookie", "<Your Cookie here>") .get();

如果isnull()为null,则

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

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