Объединить путаницу использования

Поэтому я смотрел на этот вопрос и пытался выяснить, правильно ли используется Coalesce для ответа.

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, если я правильно понял.

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

Итак, правильно ли я понимаю, что объединяюсь, думая, что здесь это вообще не нужно, учитывая, что даже в ответе он просто поставил 0 для второго аргумента. Кажется, что Coalesce в этом примере ничего не дает, и на самом деле рабочая лошадка - это "Select 1 + Select max()".

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

1 ответ

Решение

Запрос:

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

Вернется NULL если бы не было "Боба".

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

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

Другие вопросы по тегам