Ver Mensaje Individual
  #4 (permalink)  
Antiguo 11/07/2012, 12:53
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 11 meses
Puntos: 447
Respuesta: eliminar registro que tiene clave foranea

Hola vani18:

Creo que deberías comenzar por estudiar la sintaxis del DELETE, pues por lo que veo no tienes idea de cómo trabaja.

http://dev.mysql.com/doc/refman/5.0/es/delete.html

en primer lugar, en tu sentencia DELETE no estás especificando qué es lo que quieres eliminar, es decir, qué tabla o tablas quieres afectar...

Segundo, tal como especifica gnzsoloyo, no puedes eliminar una tabla y al mismo tiempo utilizarla en una subconsulta,

Cita:
Es como cortar la rama donde estás parado.
Observa este scrpit:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tablaA;
  2. +------+-------------+
  3. | id   | descripcion |
  4. +------+-------------+
  5. |    1 | uno         |
  6. |    2 | dos         |
  7. |    3 | tres        |
  8. |    4 | cuatro      |
  9. +------+-------------+
  10. 4 rows in set (0.00 sec)
  11.  
  12. mysql> SELECT * FROM tablaB;
  13. +------+-------------+
  14. | id   | descripcion |
  15. +------+-------------+
  16. |    2 | two         |
  17. |    3 | three       |
  18. |    5 | five        |
  19. +------+-------------+
  20. 3 rows in set (0.00 sec)

Supongamos que queremos eliminar de ambas tablas los registros comunes, estos registros los obtenemos con la siguiente consulta,
Código MySQL:
Ver original
  1. mysql> SELECT * FROM tablaA
  2.     -> INNER JOIN tablaB ON tablaA.id = tablaB.id;
  3. +------+-------------+------+-------------+
  4. | id   | descripcion | id   | descripcion |
  5. +------+-------------+------+-------------+
  6. |    2 | dos         |    2 | two         |
  7. |    3 | tres        |    3 | three       |
  8. +------+-------------+------+-------------+
  9. 2 rows in set (0.00 sec)

Es decir, los registros 2 y 3 de la tablaA y los registros 2 y 3 de la tablaB, esta eliminación múltiple la podrías hacer así:

Código MySQL:
Ver original
  1. mysql> DELETE tablaA.*, tablaB.*
  2.     -> FROM tablaA, TablaB WHERE tablaA.id = tablaB.id;
  3. Query OK, 4 rows affected (0.06 sec)
  4.  
  5. mysql> SELECT * FROM tablaA;
  6. +------+-------------+
  7. | id   | descripcion |
  8. +------+-------------+
  9. |    1 | uno         |
  10. |    4 | cuatro      |
  11. +------+-------------+
  12. 2 rows in set (0.00 sec)
  13.  
  14. mysql> SELECT * FROM tablaB;
  15. +------+-------------+
  16. | id   | descripcion |
  17. +------+-------------+
  18. |    5 | five        |
  19. +------+-------------+
  20. 1 row in set (0.00 sec)

Observa que en DELETE NO PUEDES UTILIZAR JOIN'S, por lo que tienes que listar las tablas separadas por comas y poner el las uniones en el WHERE.

Saludos
Leo.