Ver Mensaje Individual
  #2 (permalink)  
Antiguo 20/02/2018, 16:15
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: comparar dos tablas y elimnar algunos registros

Hola stevens82:

Cita:
necesito que de dos tablas eliminar ciertos registros
Siempre que hables de eliminar registros de una tabla, tendrás que trabajar con el comando DELETE. el primer paso es determinar qué registros son los que quieres eliminar. tal como lo tienes en tu ejemplo, la lógica sería:

Código:
ELIMINAR DE tabla_b AQUELLOS REGISTROS QUE NO EXISTAN EN LA tabla_a
dados tus datos:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla_a;
  2. +--------+--------+
  3. | codigo | nombre |
  4. +--------+--------+
  5. |      1 | AAA    |
  6. |      1 | BBB    |
  7. |      1 | CCC    |
  8. |      2 | FFF    |
  9. |      3 | GGG    |
  10. |      3 | HHH    |
  11. +--------+--------+
  12. 6 rows in set (0.00 sec)
  13.  
  14. mysql> SELECT * FROM tabla_b;
  15. +--------+--------+
  16. | codigo | nombre |
  17. +--------+--------+
  18. |      1 | AAA    |
  19. |      1 | BBB    |
  20. |      1 | CCC    |
  21. |      1 | DDD    |
  22. |      2 | EEE    |
  23. |      2 | FFF    |
  24. |      3 | GGG    |
  25. |      3 | HHH    |
  26. +--------+--------+
  27. 8 rows in set (0.00 sec)

tienes dos formas de obtener los registros que quieres eliminar:

CON LA CLÁUSULA NOT EXISTS:

Código MySQL:
Ver original
  1. mysql> SELECT *
  2.     -> FROM tabla_b
  3.     -> WHERE
  4.     -> NOT EXISTS (SELECT *
  5.     ->             FROM tabla_a
  6.     ->             WHERE
  7.     ->               tabla_b.codigo = tabla_a.codigo
  8.     ->               AND tabla_b.nombre = tabla_a.nombre);
  9. +--------+--------+
  10. | codigo | nombre |
  11. +--------+--------+
  12. |      1 | DDD    |
  13. |      2 | EEE    |
  14. +--------+--------+
  15. 2 rows in set (0.02 sec)

CON UN LEFT JOIN:

Código MySQL:
Ver original
  1. mysql> SELECT
  2.     -> tabla_b.*
  3.     -> FROM tabla_b
  4.     -> LEFT JOIN tabla_a
  5.     ->   ON tabla_a.codigo = tabla_b.codigo
  6.     ->      AND tabla_a.nombre = tabla_b.nombre
  7.     -> WHERE tabla_a.codigo IS NULL;
  8. +--------+--------+
  9. | codigo | nombre |
  10. +--------+--------+
  11. |      1 | DDD    |
  12. |      2 | EEE    |
  13. +--------+--------+
  14. 2 rows in set (0.00 sec)

Lo único que tienes que hacer es cambiar cualquiera de estos SELECT por un DELETE y listo.

Cita:
como eliminos esos registros digamos con cierto boton que ejecute esa accion?
Esto más bien es una cuestión de programación. Si manejas algún lenguaje de programación entonces dependerá de ese lenguaje el cómo ejecutes el DELETE. Estrictamente hablando de MySQL, sólo tienes que ejecutar la sentencia desde una consola o si necesitas que esto se haga de manera programada entonces programas un JOB que la ejecute:

https://dev.mysql.com/doc/refman/5.7...-overview.html

Haz la prueba y nos comentas.

Saludos
Leo.