2014-11-12 2 views
0

Итак, я смотрел на это question, и я пытаюсь выяснить, правильно ли используется Coalesce для ответа.Coacece использование путаницы

INSERT INTO users (user_id, name) 
SELECT 1 + coalesce((SELECT max(user_id) FROM users WHERE name='Bob'), 0), 'Bob'; 

Я прошу прощения, если это неправильный путь, чтобы задать этот вопрос, но у меня не было достаточно респ прокомментировать 5-летний пост. Мое замешательство исходит от использования Coalesce в этом ответе. Coalesce сравнивает два или более столбца и берет из них первое значение NON Null, если я правильно понимаю.

выпуск этого пользователя был, если значение не существует, «Bob», то его user_id поле будет 0 на вставке, что он не хотел, потому что нужно, чтобы начать на 1.

Так я Я понимаю, что сливается правильно, думая, что здесь совсем не нужно, учитывая, что даже в ответ он просто поставил 0 для второго аргумента. Кажется, что Coalesce в этом примере ничего не дает и действительно рабочая лошадь - это «Выбрать 1 + Выбрать max()».

Снова я просто пытаюсь понять концепцию Coalesce, так как я столкнулся с этим как пример проблемы, с которой я столкнулся.

ответ

1

Запрос:

SELECT max(user_id) FROM users WHERE name='Bob' 

NULL вернуться бы, если бы не было никакого 'Bob'.

Так COALESCE() используется для возврата 0 вместо NULL в этом случае, а затем добавить 1, чтобы получить следующий, если был «Боб» или 1 если бы не было.

Вы вносите COALESCE(), беря первое ненулевое значение из списка значений.

+0

Итак, Coalesce (x, 0) 0 в этом случае означает сравнимое значение. Есть ли pro или con для использования IFNULL() вместо Coalesce в этой ситуации. Мне кажется, что Coalesce меня неправильно используют, но я понимаю, как он теперь работает по вашему объяснению. – NitroFrost

+1

'COALESCE()' находится во всех основных базах данных, а 'IFNULL()' не находится в SQL Server, который вместо этого использует 'ISNULL()'. Производительность не должна отличаться. –

 Смежные вопросы

  • Нет связанных вопросов^_^