Ver Mensaje Individual
  #3 (permalink)  
Antiguo 21/05/2011, 11:19
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: 17 años
Puntos: 2658
Respuesta: Eliminar registros de 2 tablas simultaneamente

El problema está dado en tu propia propuesta:
Cita:
Lo que necesito es eliminar TODOS los registros en la TABLA1 donde IDNOTICIA = IDPARAMETRO y a su vez eliminar los registros en la TABLA2 que UNICAMENTE tengan un determinado valor de TIPO y que a su vez esten en relacion con la tabla1 (valor TIPO que indistintamente puede ser parametrizado o especificado dentro de la consulta)
Esto es imposible de hacer en una sola consulta, porque las condiciones aplicadas a cada tabla son distintas e incompatibles.

Una forma en que puedes saber anticipadamente lo que será afectado por el DELETE es realizar una consulta con las mismas condiciones. Todo lo que sea devuelto por la consulta será lo que resulte borrado:
Código MySQL:
Ver original
  1. FROM tabla1, tabla2
  2.     tabla1.id = '".$id."' OR
  3.     (tabla1.id = '".$id."'  AND tabla1.idtabla2 = tabla2.id AND tabla2.tipo = 'tipoEliminado')
Tienes que tener en cuenta que el DELETE afectará a todos los registros que componen esa tabla resultado. Como se evalúan como una unidad, si la Tabla1 es afectada en 12 registros, y esos 12 registros están relacionados a 18 registros de la tabla2, pero de esa tabal2 sólo quieres eliminar 4, ese DELETE no puede discriminarlos. Simplemente borrará los 18 porque eso es lo que le estás diciendo.
Por eso son consultas incompatibles.
Un DELETE que borra registros en más de una tabla se debe construir de modo que lo que se borre sea el conjunto resultado completo, en las tablas indicadas. No sólo en una de ellas.
¿Se entiende la idea?

Si el resultado del SELET de prueba incluye más registros a eliminar de los que quieres en una de las tablas, entonces no puedes usar un DELETE, tienes que usar dos o más (dependiendo del caso)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)