martes, 25 de enero de 2011

Comparar Tablas (Registros NO Coincidentes) EXCEPTION JOIN SQL/400

0Cuántas veces hemos querido comparar 2 tablas, saber que registros de una tabla NO están en la otra y viceversa. Puedes hacer un programa, generando el resultado en otra tabla o en un reporte, pero eso te toma un tiempo. O también puedes hacer un Query.
Algo muy práctico para hacer esto resulta usar la sentencia SELECT del SQL.
Sino estas muy familiarizado con el estándar ANSI (LEFT JOIN, RIGHT JOIN) puedes recurrir a la clausula EXCEPTION JOIN. Personalmente yo uso esta última alternativa.

SELECT A.*, B.*
FROM MILIBRERIA/ARCHIVO1 A EXCEPTION JOIN MILIBRERIA/ARCHIVO2 B
ON A.CAMPO1 = B.CAMPO1

Situar en línea  . . . . . .                                
....+....1....+....2....+....3....+....4....+....5....+....6.
CAMPO1  CAMPO2                     CAMPO3   CAMPO1  CAMPO2  
  111   Jose Vasquez                15.00        -  -       
  222   Edwin Sanchez                5.00        -  -       
********  Fin de datos  ********                            


En este ejemplo, la clausula EXCEPTION JOIN muestra como resultado los registros de la tabla ARCHIVO1 que NO se encuentran en la tabla ARCHIVO2.  Y como estamos seleccionando los campos de ambas tablas, los registros de la tabla ARCHIVO2 se muestran en NULL.

Ahora mostremos los registros de ARCHIVO2 que no están en ARCHIVO1

SELECT A.*, B.*                                                 
FROM MILIBRERIA/ARCHIVO2 B EXCEPTION JOIN MILIBRERIA/ARCHIVO1 A
ON  B.CAMPO1 = A.CAMPO1  
 
Situar en línea  . . . . . .                                       
....+....1....+....2....+....3....+....4....+....5....+....6....+...
CAMPO1  CAMPO2                     CAMPO3   CAMPO1  CAMPO2         
     -  -                                -    333   Sergio Gonzales
     -  -                                -    444   Cesar Ramirez  
********  Fin de datos  ********                                   

  

La tabla que se declara a la izquierda de la clausula EXCEPTION JOIN es la tabla primaria, es decir, la tabla que contiene los registros que NO se encuentren en la tabla de la derecha.
Si deseamos tener los registros que NO estén en ambas tablas, o sea, los registros no COINCIDENTES entre ambas tablas, solo nos basta unir ambas sentencias SELECT con la clausula UNION

SELECT A.*, B.*
FROM MILIBRERIA/ARCHIVO1 A EXCEPTION JOIN MILIBRERIA/ARCHIVO2 B
ON A.CAMPO1 = B.CAMPO1
UNION
SELECT A.*, B.*                                                 
FROM MILIBRERIA/ARCHIVO2 B EXCEPTION JOIN MILIBRERIA/ARCHIVO1 A
ON  B.CAMPO1 = A.CAMPO1 

Situar en línea  . . . . . .                                       
....+....1....+....2....+....3....+....4....+....5....+....6....+...
CAMPO1  CAMPO2                     CAMPO3   CAMPO1  CAMPO2         
  111   Jose Vasquez                15.00        -  -              
  222   Edwin Sanchez                5.00        -  -              
     -  -                                -    333   Sergio Gonzales
     -  -                                -    444   Cesar Ramirez  
********  Fin de datos  ********                                   




Nota: En la clausula ON puedes indicar los campos que desees comparar, adicionalmente puedes considerar condiciones en la clausula WHERE.
El INNER JOIN te recupera los registros coincidentes entre ambas tablas

1 comentario:

  1. excelente viejo, pero existe una forma de buscar los registros modificados. SQL tendra algun comando que realice esa tarea?

    ojala me puedas responder a cristopher.vargas@gmail.com.

    Muchas Gracias

    ResponderEliminar