Puedo usar CASE
para elegir qué columnas mostrar en una SELECT
consulta (Postgres), así:
SELECT CASE WHEN val = 0 THEN column_x
WHEN val = 1 THEN column_y
ELSE 0
END AS update, ...
¿Es posible algo similar al realizar una UPDATE
consulta en Postgres (es decir, elegir qué columnas deben actualizarse)? Supongo que no, ya que no pude encontrar nada al respecto, pero tal vez alguien tiene una alternativa inteligente (además de usar un procedimiento o actualizar cada columna usando a CASE
para determinar si el valor de la columna debe asignarse a un nuevo valor o simplemente reasignar el existente valor). Si no hay una alternativa fácil, por supuesto, también lo aceptaré como respuesta.
Información adicional : en mi caso, tengo 14 columnas potenciales que pueden actualizarse, y solo una se actualiza por fila coincidente (la tabla que se actualizará se une con otra en la consulta). La cantidad de filas para actualizar probablemente variará, podría ser decenas o cientos. Creo que existen índices para las condiciones de unión.
fuente
¿Cuántas combinaciones diferentes de columnas para actualizar tienes? ¿Cuántas filas de toda la tabla se actualizarán? ¿Existen índices para un acceso rápido a las filas para actualizar?
Dependiendo de las respuestas a estas preguntas, es posible que pueda ejecutar varias declaraciones de actualización, una para cada columna que desea actualizar y colocar la condición en el valor de esa columna en la cláusula where de la actualización para que las filas cero se actualicen si esa columna tiene el valor incorrecto
Intente y piense en conjuntos, no asuma que la actualización necesita actualizar una sola fila encontrada por la clave primaria.
fuente
fuente