sql >> Base de Datos >  >> RDS >> Database

Cómo actualizar una columna basada en un filtro de otra columna

En este tutorial, repasaremos las diversas formas de actualizar filas en una tabla usando SQL, pasando de actualizaciones más generales a métodos más específicos.

Actualización completa

Si todos los campos deben actualizarse al mismo valor, puede hacerlo con un simple UPDATE comando.

UPDATE table
SET col = new_value;

Actualización condicional

Para hacer una actualización condicional dependiendo de si el valor actual de una columna coincide con la condición, puede agregar un WHERE cláusula que así lo especifica. La base de datos primero encontrará filas que coincidan con WHERE cláusula y luego solo realizar actualizaciones en esas filas.

UPDATE table
SET col = new_value
WHERE col = old_value;

Para ampliar esto, puede agregar cualquier cosa al WHERE cláusula que desee, siempre que sea una expresión válida. Entonces, para realizar una actualización basada en el valor de otra columna en la misma tabla, podría ejecutar lo siguiente:

UPDATE table
SET col = new_value
WHERE other_col = some_other_value;

Desde el WHERE La cláusula puede contener cualquier expresión válida, también tiene la posibilidad de realizar actualizaciones donde varias columnas cumplen los criterios

UPDATE table
SET col = new_value
WHERE col = old_value
AND other_col = some_other_value;

UPDATE table
SET col = new_value
WHERE col = old_value
OR other_col = some_other_value;

Como puede ver, puede expandir el WHERE cláusula tanto como desee para filtrar las filas para actualizar lo que necesita.

Ahora, ¿qué sucede si desea actualizar filas en una tabla según la condición de otra tabla? Esta pregunta lleva a algunas formas diferentes de hacerlo.

Desde el WHERE cláusula puede contener cualquier expresión válida, podría usar una subconsulta:

UPDATE table
SET col = new_value
WHERE other_col IN (
SELECT other_col
FROM other_table
WHERE conditional_col = 1
);

También puede usar una subconsulta en el SET parte de la declaración si desea establecer la columna en un valor en otra tabla

UPDATE table
SET col = (
SELECT other_col
FROM other_table
WHERE other_table.table_id = table.id
);

Quizás una forma más fácil es especificar varias tablas después de UPDATE cláusula. Solo el SET expresión realizará actualizaciones, pero la lista de tablas adicionales permitirá que se incluyan las tablas.

UPDATE table, other_table
SET table.col = other_table.other_col
WHERE table.id = other_table.table_id;

De manera similar a expandir WHERE cláusula, la cantidad de tablas se puede expandir para incluir todas las tablas que necesita si tiene varias tablas que deben unirse.