Добавить содержимое одного столбца в другой без перезаписи - PullRequest
0 голосов
/ 25 октября 2018

Я могу легко скопировать содержимое одного столбца в другой, используя SQL UPDATE.Но мне нужно сделать это, не удаляя содержимое, уже находящееся там, поэтому, по сути, я хочу добавить столбец к другому, не перезаписывая исходное содержимое другого.

У меня есть столбец с именем notes по неизвестной причине после несколькихмесяцы я добавил еще один столбец с именем product_notes и через 2 дня понял, что у меня есть два набора заметок, которые мне срочно нужно объединить.

Обычно при создании заметки мы просто добавляем любую заметку, уже существующую с формой.Мне нужно поставить эти два столбца таким образом, сохраняя все заметки в первом столбце, например

Примечания к столбцам = Нет в наличии Пит 040618 --- заказано 200 единиц Нефрита 050618 --- 200 единиц получено Лила080618

и

Колонка product_notes = 5 оставленных единиц Dave 120618 --- недопустимое качество 10724, указанное в списке Dave 130618

Iнужно сложить их вместе с нашей проставкой --- без потери содержимого первого столбца, поэтому результат должен быть таким для моего теста:

Примечания столбца = Нет в наличии Пит 040618--- заказано 200 единиц Jade 050618 --- получено 200 единиц Lila 080618 --- осталось 5 единиц Dave 120618 --- недопустимое качество 10724 указано в списке Dave 130618

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Решение, предоставленное @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, '')), '');

0 голосов
/ 25 октября 2018

Все просто -

update table1 set notes = notes || '---' || product_notes;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...