Решение, предоставленное @MaheshHViraktamath, прекрасно, но проблема с простой конкатенацией строк заключается в том, что если какой-либо из элементов, которые объединяются, имеют значение NULL, весь результат становится NULL.
Другая потенциальная проблема - если любое из полейпустой.В этом случае вы можете получить результат field a---
или ---field b
.
. Для защиты от первого сценария (без установки проверок в предложении WHERE) вы можете использовать CONCAT_WS следующим образом: CONCAT_WS('---', notes, product_notes)
.Это объединит два (или сколько бы вы ни добавили) поля с первым параметром, то есть '---'.Если какое-либо из этих двух полей имеет значение NULL, разделитель не будет использоваться, поэтому вы не получите результат, если разделитель будет добавлен или добавлен.
Существует две проблемы, описанные выше: если оба поляNULL, результат не NULL, а пустая строка.Чтобы справиться с этим случаем, просто поместите его в NULLIF: NULLIF(CONCAT_WS('---', notes, product_notes), '')
, чтобы возвращалось значение NULL, если оба поля имеют значение NULL.
Другая проблема заключается в том, что если любое из полей пусто, разделитель все равно будет использоваться.Чтобы защититься от этого сценария (и только вы будете знать, стоит ли защищать этот сценарий, или, если это даже желательно, основываясь на ваших данных), поместите также каждое поле в NULLIF: NULLIF(CONCAT_WS('---', NULLIF(notes, ''), NULLIF(product_notes, '')), '')
В результате вы получите: UPDATE your_table SET notes = NULLIF(CONCAT_WS('---', NULLIF(notes, ''), NULLIF(product_notes, '')), '');