De forma general, el formato de la sentencia UPDATE necesaria sería el siguiente:
Este UPDATE actualiza un atributo de un conjunto de tuplas a partir de un atributo de un segundo conjunto.
Analizando cada parte, tenemos:
1. Indicamos el atributo de la tabla que vamos a actualizar
2. Seleccionamos el atributo de la tabla origen del que tomar el nuevo valor. Concretamente estamos seleccionando aquellas tuplas de la tabla origen cuya clave primaria coincide con la clave primaria de la tabla destino (la condición podría haber sido sobre otro campo, pero siempre de valor único).
3. Seleccionamos el conjunto de tuplas a actualizar. Actualizaremos aquellas tuplas cuya clave primaria esté dentro del conjunto de claves primarias de la tabla origen. Sin esta cláusula se actualizarían todas las tuplas de la tabla destino en lugar de hacerlo únicamente en las que nos interesan. Su ausencia supondría el problema de asignar el valor null en aquellas tuplas cuya clave primaria no aparece en el conjunto de la subconsulta, ya que la condición "alias_td.clave_primaria = alias_to.clave_primaria" de la subconsulta no sería cierta en estos casos y devolvería null.
Como ejemplo, veamos la forma de actualizar en la tabla "usuarios" el email y teléfono a partir de la tabla "tmp_usuarios":
update tabla_destino alias_td set alias_td.atributo = ( select alias_to.atributo from tabla_origen alias_to where alias_td.clave_primaria = alias_to.clave_primaria) where alias_td.clave_primaria in
(select clave_primaria from tabla_origen)
Este UPDATE actualiza un atributo de un conjunto de tuplas a partir de un atributo de un segundo conjunto.
Analizando cada parte, tenemos:
1. Indicamos el atributo de la tabla que vamos a actualizar
update tabla_destino alias_td set alias_td.atributo =
2. Seleccionamos el atributo de la tabla origen del que tomar el nuevo valor. Concretamente estamos seleccionando aquellas tuplas de la tabla origen cuya clave primaria coincide con la clave primaria de la tabla destino (la condición podría haber sido sobre otro campo, pero siempre de valor único).
(select alias_to.atributo from tabla_origen alias_to where alias_td.clave_primaria = alias_to.clave_primaria)
3. Seleccionamos el conjunto de tuplas a actualizar. Actualizaremos aquellas tuplas cuya clave primaria esté dentro del conjunto de claves primarias de la tabla origen. Sin esta cláusula se actualizarían todas las tuplas de la tabla destino en lugar de hacerlo únicamente en las que nos interesan. Su ausencia supondría el problema de asignar el valor null en aquellas tuplas cuya clave primaria no aparece en el conjunto de la subconsulta, ya que la condición "alias_td.clave_primaria = alias_to.clave_primaria" de la subconsulta no sería cierta en estos casos y devolvería null.
where alias_td.clave_primaria in (select clave_primaria from tabla_origen)
Como ejemplo, veamos la forma de actualizar en la tabla "usuarios" el email y teléfono a partir de la tabla "tmp_usuarios":
update seg_usuario s set s.usuario_mail = (select f.email from tmp_usuarios f where s.seg_usuario_id = f.usuario), s.tf = (select f.telefono from tmp_usuarios f where s.usuarios_id = f.usuario) where s.usuarios_id in (select usuario from tmp_usuarios)
0 comentarios:
Publicar un comentario