Оператор условной вставки в MySQL

#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);