Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-04-2007
Nelly Nelly is offline
Miembro
 
Registrado: oct 2005
Posts: 148
Poder: 19
Nelly Va por buen camino
Question ¿Como hago una consulta para comparar dos tablas?

Hola a todos!!!!!, Buen dia

Tengo un problema para realizar una consulta de comparación, entre dos tablas, para empezar utilizo firebird como BD, y lo que necesito es como dije anteriormente hacer una comparación, la cuestión es que tengo dos tablas, ambas con los mismo campos,pero se hizo una actualización hace unos meses en la tabla 1, y la tabla 2 no se toco, ahora quiero saber, que cantidad de registro aunmento en la tabla 1, y quienes son los de la tabla 1, que no se encuentren en la tabla 2, la estructura de la tabla es la siguiente:
Código SQL [-]
CREATE TABLE REGISTRO2007 (
    CVE_DTO      VARCHAR(2),
    SECCION      VARCHAR(4),
    LOCALIDAD    VARCHAR(4),
    MANZANA      VARCHAR(4),
    EDAD         VARCHAR(3),
    CALLE        VARCHAR(32),
    NO_EXT       VARCHAR(8),
    INTERIOR     VARCHAR(8),
    COLONIA      VARCHAR(32),
    CP           VARCHAR(5),
    ESTATUS      VARCHAR(50),
    NOM          VARCHAR(60),
    APPAT        VARCHAR(40),
    APMAT        VARCHAR(40),
    CVE_ELEC     VARCHAR(18) NOT NULL,
    CVE_MPO      INTEGER,
    CVE_EDO      SMALLINT
__________________

Nelly [ Vive y deja vivir ]

Última edición por marcoszorrilla fecha: 15-04-2007 a las 22:35:10.
Responder Con Cita
  #2  
Antiguo 15-04-2007
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Para saber la diferencia numérica, utiliza un:

Código SQL [-]
Select (*) count from Tabla1
//y luego
Select (*) count from Tabla2

Esto te devolverá los registros que tiene cada tabla, la diferencia te dará el incremento que ha tenido la que se ha modificado.

Para saber los nuevos registros tendrías que comparar el campo clave de ambas tablas

Código SQL [-]
Select T1.CampoClave, T2.CampoClave
from Tabla1 as T1, Tabla2 as T2
Whre T1.CampoClave <> T2.CampoClave

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 15-04-2007
Nelly Nelly is offline
Miembro
 
Registrado: oct 2005
Posts: 148
Poder: 19
Nelly Va por buen camino
Hay manera de ver solo los que se insertaron?, por ejemplo si se inserto 1000 personas, solo vea esas mil personas, porq esa consulta que escribiste, me enlista dos campos, que es la cve_elec, en la primera me muestra todos sin repetir, pero en la segunda columna esta repitiendo una sola clave.
__________________

Nelly [ Vive y deja vivir ]
Responder Con Cita
  #4  
Antiguo 16-04-2007
hach hach is offline
Miembro
 
Registrado: mar 2007
Ubicación: Bariloche, Argentina
Posts: 44
Poder: 0
hach Va por buen camino
Código SQL [-]
SELECT * FROM TABLA1 WHERE NOT EXISTS (SELECT * FROM TABLA2 WHERE TABLA1.CLAVE=TABLA2.CLAVE)

Esto te retorna los registros de la tabla1 que no existen en la tabla2
Creo que los paréntesis iban ahi, en esta maquina no tengo ninguna DB para probar
Responder Con Cita
  #5  
Antiguo 16-04-2007
Nelly Nelly is offline
Miembro
 
Registrado: oct 2005
Posts: 148
Poder: 19
Nelly Va por buen camino
Buen dia!!!!!
Realice la siguiente consulta que se mando, pero no me esta arrojando el resultado correcto, ya que de la tabla 1, reste lo que tiene la tabla 2 y la diferencia entre ambas, no es la misma que arroja la consulta, es 3 veces de la cantidad real.

Código SQL [-]
SELECT pd.cve_elec,pd.appat,pd.apmat,pd.nom FROM padron1  pd WHERE NOT EXISTS (SELECT p.cve_elec,p.appat,p.apmat,p.nom FROM padron2
WHERE pd.cve_elec=p.cve_elec)
__________________

Nelly [ Vive y deja vivir ]
Responder Con Cita
  #6  
Antiguo 16-04-2007
hach hach is offline
Miembro
 
Registrado: mar 2007
Ubicación: Bariloche, Argentina
Posts: 44
Poder: 0
hach Va por buen camino
Suponiendo que la unica clave es cve_elec el SQL seria:
Código SQL [-]
SELECT pd.cve_elec, pd.appat, pd.apmat, pd.nom FROM padron1 pd WHERE NOT EXISTS (SELECT * FROM padron2 WHERE pd.cve_elec=cve_elec)
Debería funcionar...Si no es así, avisa que lo pruebo sobre una DB...Saludos
Responder Con Cita
  #7  
Antiguo 16-04-2007
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Aqui tienes una "receta" de MySQL CookBook que puedes aplicar a FB


Tenemos dos tablas: artistas y pinturas.
Determinemos que qu artistas no se encuentran en la tabla pinturas. En este ejemplo las tablas son pequeñas asi que es facil determinar eso visualmente, podemos ver que no hay pinturas de Monet y Picaso (no hay registros en pinturas con un valor de a_id de 2 o 4)

Código SQL [-]
mysql> SELECT * FROM artist ORDER BY a_id;
Código:
+------+----------+
| a_id | name |
+------+----------+
| 1 | Da Vinci |
| 2 | Monet |
| 3 | Van Gogh |
| 4 | Picasso |
| 5 | Renoir |
+------+----------+

Código SQL [-]
SELECT * FROM painting ORDER BY a_id, p_id;
Código:
+------+------+-------------------+-------+-------+
| a_id | p_id | title | state | price |
+------+------+-------------------+-------+-------+
| 1 | 1 | The Last Supper | IN | 34 |
| 1 | 2 | The Mona Lisa | MI | 87 |
| 3 | 3 | Starry Night | KY | 48 |
| 3 | 4 | The Potato Eaters | KY | 67 |
| 3 | 5 | The Rocks | IA | 33 |
| 5 | 6 | Les Deux Soeurs | NE | 64 |
+------+------+-------------------+-------+-------+
Haciendo un left join asi
Supongamos que hacemos
Código SQL [-]
SELECT * FROM artist LEFT JOIN painting
   ON artist.a_id = painting.a_id;
Ejemplo:
Obtenemos una tabla de pinturas con sus artistas
Código:
+------+----------+------+------+-------------------+-------+-------+
| a_id | name | a_id | p_id | title | state | price |
+------+----------+------+------+-------------------+-------+-------+
| 1 | Da Vinci | 1 | 1 | The Last Supper | IN | 34 |
| 1 | Da Vinci | 1 | 2 | The Mona Lisa | MI | 87 |
| 2 | Monet | NULL | NULL | NULL | NULL | NULL |
| 3 | Van Gogh | 3 | 3 | Starry Night | KY | 48 |
| 3 | Van Gogh | 3 | 4 | The Potato Eaters | KY | 67 |
| 3 | Van Gogh | 3 | 5 | The Rocks | IA | 33 |
| 4 | Picasso | NULL | NULL | NULL | NULL | NULL |
| 5 | Renoir | 5 | 6 | Les Deux Soeurs | NE | 64 |
+------+----------+------+------+-------------------+-------+-------+
La tabla es similar a la que se obtiene con un join normal, solo que en este caso tambien produce una fila para cada artista que no tiene pinturas que correspondan en la tabla "pinturas". Por ello las columnas correspondientes a la tabla "pinturas" aparecen con nulos.

Ahora restringimos solo las columnas que no se encontraron y agregamos un
WHERE que busque solo los valores Nulos para la columna "pintura"

Código SQL [-]
SELECT * FROM artist LEFT JOIN painting
 ON artist.a_id = painting.a_id
WHERE painting.a_id IS NULL;
Código:
+------+---------+------+------+-------+-------+
| a_id | name | a_id | p_id | title | price |
+------+---------+------+------+-------+-------+
| 2 | Monet | NULL | NULL | NULL | NULL |
| 4 | Picasso | NULL | NULL | NULL | NULL |
+------+---------+------+------+-------+-------+
Finalmente para mosotrar solo los valores de la tabla artistas que no estan en la tabla pinturas, ordenamos las columnas para incluir solo las columnras de la tabla artistas


Código SQL [-]
mysql> SELECT artist.* FROM artist LEFT JOIN painting
-> ON artist.a_id = painting.a_id
-> WHERE painting.a_id IS NULL;
Código:
+------+---------+
| a_id | name |
+------+---------+
| 2 | Monet |
| 4 | Picasso |
+------+---------+
Lo mismo se aplica para el ejemplo que quieres hacer, saber que registros no se encuentran en otra tabla. Solo sigue l ejemplo, razónalo y veras que es sencillo
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
como hago esta consulta. edy_aca SQL 4 17-09-2004 17:09:48
como hago esta consulta armando SQL 5 01-03-2004 19:39:00
Como hago esta consulta? danytorres SQL 2 27-02-2004 13:31:51
como hago esta consulta? danytorres SQL 4 16-12-2003 14:19:39


La franja horaria es GMT +2. Ahora son las 09:40:33.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi