P03 Adicional

update con subconsulta

Existe la posibilidad de modificar la información contenida en una tabla asignando como nuevo valor o valores, el resultado de una consulta.

El resultado de la consulta puede asignarse a una única columna o a una lista de columnas. En el primer caso, la sentencia SELECT sólo devolverá un valor (una fila y una columna) el cual debe coincidir en tipo de dato y longitud con el tipo de dato y longitud de la columna a la cual asignamos el valor.

Es importante que nos aseguremos de que la subconsulta devuelve un único valor y que éste sea consistente con el tipo de dato esperado.



update imparte 
set asignatura='BDA', 
dni = (select dni from profesores) 
where asignatura like '%BD%'; 


ERROR: 
la subconsulta de una sola fila devuelve más de una fila 



Finalmente, podemos combinar todo lo visto en una única sentencia. 

select * from asignaturas; 

codigo 
descripcion 
creditoscreditosp 
HI 
HISTORIA DE LA INFORMATICA42
FBDFUNDAMENTOS DE LAS BASES DE DATOS42
DGBDDISEÑO Y GESTION DE BASES DE DATOS42
PCPROGRAMACION CONCURRENTE42
FPFUNDAMENTOS DE LA PROGRAMACION42

update asignaturas
set creditos = 5,
(descripcion, creditosp) = (select nombre, 3 from profesores where dni = '21333444')
where codigo like '%BD%';

select * from asignaturas; 

codigo 
descripcion 
creditoscreditosp 
HI 
HISTORIA DE LA INFORMATICA42
FBDRAFAEL ROMERO53
DGBDRAFAEL ROMERO53
PCPROGRAMACION CONCURRENTE42
FPFUNDAMENTOS DE LA PROGRAMACION42


NOTA: hemos utilizado una constante en la subconsulta (el valor 3) 
Comments