#mysql #sql #sql-insert
#mysql #sql #sql-вставка
Вопрос:
Я хотел бы достичь следующего в операторе вставки MySQL.
Скажем, например, есть оператор MySQL, подобный приведенному ниже:
Insert into table_name (col1, col2, col3) values (val1, val2, val3, val4);
Чего я хочу добиться, так это: если val3 пуст, то val4 следует вставить в col3. Если значение val4 пустое, то значение val3 должно быть вставлено в col3.
Как я могу добиться этого в инструкции MySQL insert?
Комментарии:
1. Количество столбцов и количество значений должны строго совпадать.
2. Что происходит, когда val3 и val4 оба пусты или оба имеют значение?
Ответ №1:
Если «Если val3
пусто» означает « val3
равно НУЛЮ», то
Insert into table_name (col1, col2, col3) values (val1, val2, COALESCE(val3, val4));
Если val3
не равно NULL — это значение будет вставлено и val4
в любом случае будет проигнорировано.
Если val3
равно null, то val4
будет вставлено, даже если оно равно NULL.
Комментарии:
1. @MKhalidJunaid Я сказал, что я описываю случай, когда «значение val3 пустое» означает только «значение val3 равно нулю» . Поскольку отображаемый текст запроса всегда будет выдавать синтаксическую ошибку, а MySQL не поддерживает пропуск значений (например
(1,,2)
), OP сообщает о каком-то языке верхнего уровня, где «пустое» значение означает пропущенное значение в вызове — в этом случае NULL передается на сервер MySQL.
Ответ №2:
Вы можете использовать оператор case для проверки наличия null или » string
Insert into table_name (col1, col2, col3)
values (val1, val2, case when val3 is null or val3 = '' then val4 else val3 end);