Я могу использовать, CASE
чтобы выбрать столбцы для отображения в SELECT
запросе (Postgres), например так:
SELECT CASE WHEN val = 0 THEN column_x
WHEN val = 1 THEN column_y
ELSE 0
END AS update, ...
Возможно ли вообще что-то подобное при выполнении UPDATE
запроса в Postgres (то есть выбрать, какие столбцы следует обновить)? Я предполагаю, что нет, так как я ничего не мог найти по этому поводу, но, возможно, у кого-то есть разумная альтернатива (помимо использования процедуры или обновления каждого столбца с помощью, CASE
чтобы определить, следует ли присвоить значению столбца новое значение или просто переназначить существующее значение). Если нет легкой альтернативы, я, конечно, тоже приму это как ответ.
Дополнительная информация : в моем случае у меня есть 14 потенциальных столбцов, которые могут быть обновлены, при этом обновляется только один столбец для соответствующей строки (обновляемая таблица объединяется с другим в запросе). Количество строк для обновления, скорее всего, будет варьироваться, может быть десятки или сотни. Я считаю, что для условий присоединения имеются индексы.
источник
Сколько разных комбинаций столбцов для обновления у вас есть? Сколько строк всей таблицы будет обновлено? Имеются ли индексы для быстрого доступа к строкам для обновления?
В зависимости от ответов на эти вопросы вы можете выполнить несколько операторов обновления, по одному для каждого столбца, который вы хотите обновить, и поместить условие в значение этого столбца в предложении where обновления, чтобы нулевые строки обновлялись, если этот столбец имеет неправильное значение.
Попробуйте думать на основе множеств, не думайте, что для обновления нужно обновить одну строку, найденную по первичному ключу.
источник
источник