Ver Mensaje Individual
  #2 (permalink)  
Antiguo 25/02/2012, 05:44
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: actualizar y consultar una tabla

Cita:
Alguna idea de que debo corregir
Si, una idea simple: Hazlo en dos consultas separadamente...

Los DBMS en general, por una cuestión de seguridad del proceso, no te permiten leer y modificar la misma tabla en la misma sentencia.
La razón de esto es muy simple: Supongamos que tu sentencia busca todos los registros donde el campo A tenga un cierto dato, y luego intenta cambiar ese mismo valor por otro. ¿En qué estado queda ese registro? ¿Es parte de los registros leídos, o no lo es?
Otro caso es cuando eliminas un registro en base a un valor. ¿Cómo haces para eliminar físicamente el registro donde el puntero está posicionado? Es, como siempre digo, como cortar la rama del árbol, en la que tu mismo estás parado.

Mas o menos esa es la idea. Los DBMS bloquean la tabla que se lee para evitar inconsistencias en el proceso, por lo cual no pueden hacerse modificaciones mientras no se termina la lectura, y como la interpretación del WHERE es la última parte del proceso, ese SELECT tiene que liberar la tabla para que el UPDATE comience a funcionar.

Por otra parte, ¿Qué sentido tiene hacer una sentencia como esta:
Código SQL:
Ver original
  1. UPDATE tabla SET num=num+1 WHERE (SELECT * FROM tabla WHERE id=7)
Cuando la segunda que pones ya cumple la función pedida:
Código SQL:
Ver original
  1. UPDATE tabla SET num=num+1 WHERE id=7

Yo, al menos, no le veo sentido...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)