Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

comparar dos tablas y elimnar algunos registros

Estas en el tema de comparar dos tablas y elimnar algunos registros en el foro de Mysql en Foros del Web. Hola necesito que de dos tablas eliminar ciertos registros digamos tienen el campo codigo y nombre iguales tabla A codigo - nombre 1 - AAA ...
  #1 (permalink)  
Antiguo 20/02/2018, 15:39
 
Fecha de Ingreso: octubre-2011
Mensajes: 132
Antigüedad: 12 años, 6 meses
Puntos: 4
comparar dos tablas y elimnar algunos registros

Hola necesito que de dos tablas eliminar ciertos registros

digamos tienen el campo codigo y nombre iguales

tabla A
codigo - nombre
1 - AAA
1 - BBB
1 - CCC
2 - FFF
3 - GGG
3 - HHH

Tabla B
codigo - nombre
1 - AAA
1 - BBB
1 - CCC
1 - DDD
2 - EEE
2 - FFF
3 - GGG
3 - HHH

pero la tabla B tiene el codigo
1 con nombre DDD que no esta en la tabla A
y el codigo 2 con nombre EEE que tampoco esta en la tabla como eliminos esos registros digamos con cierto boton que ejecute esa accion?
  #2 (permalink)  
Antiguo 20/02/2018, 16:15
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.
  #3 (permalink)  
Antiguo 20/02/2018, 17:19
 
Fecha de Ingreso: octubre-2011
Mensajes: 132
Antigüedad: 12 años, 6 meses
Puntos: 4
Respuesta: comparar dos tablas y elimnar algunos registros

Hola Leo gracias por tu ayuda, ejecute esas 2 sentencia y funciono me muestra el registro que no existe en la otra tabla pero al cambiar el select por el delete sale error, las 2 tablas no llevan la mismca cantidad de campos y tiene campos diferentes a excepcion de esos, y otra cosas es en oracle haya alguna diferencia significativa en eso y q modificaria gracias.

Corección: la primera consulta si funciona y elimina correctamente...

y como podria hacer la actualziacion ya que tambien tiene 2 campos de fecha; fechaInicio y fechaFinal en las 2 tablas

Última edición por stevens82; 20/02/2018 a las 18:35

Etiquetas: campo, registro, registros, tabla, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:47.