Sabemos que en las instrucciones LMD (insert, update, delete) podemos usar subconsultas. Pero en ocasiones, como cuando se quiere actualizar el valor de un campo a partir del valor anterior del mismo, no es conveniente emplearlas. Lo único que conseguimos es complicar la instrucción y penalizar el rendimiento en su ejecución.
Consideremos esta tabla, Articulo, con datos de precio de los artículos de una BD:
+----+--------+------+ | id | precio | id_p | +----+--------+------+ | 1 | 10 | 1 | | 2 | 25 | 2 | | 3 | 50 | 2 | +----+--------+------+
Supongamos que queremos actualizar el precio del artículo 3, haciéndolo dos euros más caro. Está claro que tenemos que tomar como referencia el precio anterior y sumarle 2. Pero para ello no es necesario hacer una subconsulta para obtener el precio anterior:
update Articulo
set precio = 2 + (select precio
from Articulo
where id = 3)
where id = 3;
Nota: esta instrucción en MySQL ni siquiera puede ejecutarse porque no se permite sub-consultar una tabla que está siendo modificada (ver esta lección). Habría que cambiar la tabla Articulo en la subconsulta por una tabla derivada como (select * from Articulo).
Para hacer esa modificación basta ejecutar la siguiente instrucción:
update Articulo
set precio = 2 + precio
where id = 3;
Como en la mayoría de los lenguajes de programación, en la expresión precio = 2 + precio, el símbolo precio de la parte derecha de la asignación corresponde al valor antiguo del campo precio, mientras que, en la parte izquierda, precio se refiere al nuevo valor que queremos dar a ese campo.
No hay comentarios:
Publicar un comentario