Использование COALESCE ()

0

Я нашел этот вопрос для интервью отсюда. Учитывая это содержимое таблицы 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           |
|---------------------|------------------|------------------|

Вот запрос, написанный для возврата списка клиентов, не упомянутых Джейн Смит:

SELECT Name FROM Customers WHERE ReferredBy <> 2;

Каким будет результат запроса? Зачем? Что было бы лучшим способом написать его? Ответ, упомянутый на веб-сайте:

SELECT Name FROM Customers WHERE ISNULL(ReferredBy, 0) <> 2;

Мой вопрос заключается в том, как мы можем написать тот же запрос с помощью COALESCE(), потому что, как упоминалось здесь, COALESCE() возвращает только первое non-null значение.

Теги:
tsql

1 ответ

2
Лучший ответ

В данном случае вы можете просто заменить isnull() на coalesce(), заменив имена функций.

isnull(referredby, 0) возвращает 0, если referredby равно нулю еще referredby. Так же coalesce(referredby, 0), как если referredby имеет нулевое значение, 0 является первым не нулевое выражение, и если referredby не является нулевым referredby, что первое не нулевое выражение и возвращается.

На самом деле единственная разница между isnull() и coalesce() заключается в том, что isnull() может принимать только два выражения, где coalesce() принимает два или более. Используя isnull() вам нужно будет isnull() вызовы, если у вас было более двух выражений.

  • 1
    COALESCE () также является стандартным способом сказать это помимо SQL Server / T-SQL
  • 0
    @sticky, но в документации сказано, что coalesce() возвращает только non-null значения, в этом случае имеет ли смысл coalesce(referredby, 0) ? Coz в соответствии с примером, показанным там SELECT COALESCE(NULL, NULL, 'third_value', 'fourth_value'); возвращает только third_value же самое будет в случае с coalesce(referredby, 0) third_value coalesce(referredby, 0) верно? т.е. показывает non-null значения referredby , делает ввод 0 сделать его функционировать как ISNULL , если да , пожалуйста , вы можете подробно объяснить , каким образом ?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню