Объединить путаницу использования
Поэтому я смотрел на этот вопрос и пытался выяснить, правильно ли используется 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()
взятие первого ненулевого значения из списка значений.