SQL - comparacion de tablas

 
Vista:

comparacion de tablas

Publicado por carlos garcia (1 intervención) el 04/01/2005 22:09:58
hola tengo 2 tablas, la tabla 1 tablas tiene nombres que se ingresaron y la otra tabla tiene nombres que ya estan, debo hacer una consulta que me diga cuales nombres de la tabla 1 son nuevos, es decir una comparacion entre tablas.. la tabla uno es la que siempre esta cambiando, ientras que la tabla 2 es la que tiene nombres ya...

graias de verdad ..
bye
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:comparacion de tablas

Publicado por EnriqueK (69 intervenciones) el 05/01/2005 14:48:11
Comparar ingreso de datos...

Select campo1, campo2 ...
from tabla1
where tabla1.camponombre not in (Select tabla2.camponombre from tabla2)

Si la consulta se hace por nombre pero no creo q sea el campo de busqueda debe haber un Id, recuerda que toda comporacion de cadena es mucha mas lenta que una comparacion de enteros.
Espero no este mal ....

Atte.
EnriqueK
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:comparacion de tablas

Publicado por calos garcia (6 intervenciones) el 05/01/2005 15:38:06
no me funciona!! hay otra forma de hacerlo??? yo lo hice con las sentecnias que se generan en access y nada!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:comparacion de tablas

Publicado por Liliana (426 intervenciones) el 05/01/2005 16:56:57
Hola Carlos,
Ayudaría que nos dieras información cuando nos dices que no funciona.

Teniendo dos tablas como las siguientes,
Tabla1:
clave1 nombre1
1 Luis
2 Carlos
3 Juan

Tabla2:
clave2 nombre2
1 Luis
2 Ramon
3 Ana

Y la consulta que genera Access de no coincidentes:
SELECT DISTINCTROW [Tabla1].[clave1], [Tabla1].[nombre1]
FROM Tabla1 LEFT JOIN Tabla2 ON [Tabla1].[nombre1] = [Tabla2].[nombre2]
WHERE ([Tabla2].[nombre2] Is Null);

El resultado es:
clave1 nombre1
2 Carlos
3 Juan

Saludos, Liliana.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:comparacion de tablas

Publicado por carlos garcia (6 intervenciones) el 05/01/2005 21:38:07
hola encontre otra forma de hacerlo:
select * from tabla1 WHERE NOT EXISTS (SELECT dato2 FROM tabla2 where tabla1.dato1 = tabla2.dato2) ,

el problema esta es que necesito datos de la tabla2 que no tiene la tabla 1 y la sentencia que me diste esta bien y lohace pero los datos que arroja salen como null porque???
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:comparacion de tablas

Publicado por Isaías Islas (5072 intervenciones) el 05/01/2005 23:00:24
Con permiso de Liliana

Salen en NULL porque esos registros, NO EXISTEN en la tabla 2, sin embargo si en la tabla1.

En pocas palabras, NO hay liga de registros cuando estan en NULL

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:comparacion de tablas

Publicado por carlos garcia (6 intervenciones) el 05/01/2005 23:24:07
select * from tabla1 WHERE NOT EXISTS (SELECT dato2 FROM tabla2 where tabla1.dato1 = tabla2.dato2)

en esta sentencia ahi alguna forma de que pueda utilizar los datos de la tabla 2, ya que me salen los datos pero de la tabla 1 y necesito los datos de la tabla 2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:comparacion de tablas

Publicado por Jaime (17 intervenciones) el 06/01/2005 00:40:25
Carlos, la unica forma de utilizar los datos de la tabla 2 es con la consulta que Liliana le paso, ya que en su consulta le esta diciendo que le muestre los datos de la tabla 1 que no existen en la tabla2.
Si se hiciera un left join de tabla 1 a tabla 2 para aplicar el criterio de filtrado que esta usando actualmente, obtendria los mismos resultados que ofrece la consulta de Liliana.

Si esta seguro que los resultados son otros, creo que falta algo en el planteamiento del problema.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:comparacion de tablas

Publicado por Isaías Islas (5072 intervenciones) el 06/01/2005 02:11:10
Claro que se puede, cambiando el orden de las tablas:

select * from tabla2 WHERE NOT EXISTS (SELECT dato2 FROM tabla1 where tabla1.dato1 = tabla2.dato2)

Creo.........
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:comparacion de tablas

Publicado por Liliana (426 intervenciones) el 06/01/2005 11:26:42
Hola Carlos,
Desde tu primera posta, estás hablando de nombres que están en la tabla 1 y no en la tabla 2, por lo tanto, como dicen los compañeros, es imposible que encuentres algo distinto de NULO en la tabla 2.
"debo hacer una consulta que me diga cuales nombres de la tabla 1 son nuevos", este es tu planteo.
Ahora, mi intuición femenina me lleva al delirio de pensar que querés saber qué información cambió en la tabla 1. ¿Me equivoco?
Si es así, a menos que lleves una auditoría, o tengas un dato tipo fecha en cada fila como para controlar los cambios... no veo la forma.
Creo que lo mejor, antes de seguir con suposiciones, es que nos plantees un ejemplo con datos como los que te mandé antes, así todos nos sacamos la duda.
Saludos, Liliana.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:comparacion de tablas

Publicado por carlos garcia (6 intervenciones) el 06/01/2005 12:40:08
gracias por contestar...pòngamos!!!
llamemos a las tablas 1 "noconocidos" y la tabla 2 "yaexiste"

lo que quiero es que la sentencia saque cuales son los datos de la tabla"noconocidos" que no estan en la tabla "yaexisten" pero que se reflejen con los datos de la tabla "yaexisten"

pòr ejemplo:

tabla noconocidos I tabla yaexisten
nombres,cargos,sueldos I nombre apellidos cedula,direccio

deberia reflejar el resultados: lo siguiente
(nombre,apeliido,cedula,direccion,sueldos) aqui salen los resultados cuando hacen la comparacion con la tabla "noconocidos" fijense que tiene datos de la tabla yaexisten y latabla noconocios!

gracias por la ayuda...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:comparacion de tablas

Publicado por Jaime (17 intervenciones) el 06/01/2005 13:15:17
Buenos dias a todos,

Bueno según este ultimo planteamiento de carlos, creo que todos hemos estado pisando el terreno que no es.
Claro!! basados en la forma como se propuso inicialmente el problema.

Si no estoy mal, Carlos lo que quiere es sacar informacion de clolumnas contenidas en las dos tablas, Si es asi Carlos, la consulta seria mas o menos asi:

Select nombre,apeliido,cedula,direccion,sueldos from NoConocidos N rigth Join YaExisten Y on N.Nombres = Y.Nombre

Claro, que si es esto lo que se busca, seria muy bueno crear un ID numerico para cada registro, para evitar la identificación por campos de texto. (A mi modo, es solo una opinión).

Saludos desde Colombia.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:comparacion de tablas

Publicado por carlos garcia (6 intervenciones) el 06/01/2005 14:04:44
GRACIAS jaime pero no necesito a los que existen sino a los que no existen! es esta sentencia:

select distinct dato1 from tabla1 WHERE NOT EXISTS (SELECT dato2 FROM tabla2 where tabla1.dato1 = tabla2.dato2)

es esta misma...igualita!! lo unico malo es que no necesito los datos de la tabla 2 es decir:

select distinct cedula from empleados WHERE NOT EXISTS (SELECT * FROM datos_generales where empleados.cedula = datos_generales.cedula)

pero necesito que me aparezcan datos de la tabla datos generales, como cedula (otra vez)nombre, apellido, direccion, correo etc!!!

valoro mucho su ayuda gracias!

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:comparacion de tablas

Publicado por Liliana (426 intervenciones) el 06/01/2005 14:22:52
Carlos,
solo para intentar seguir adivinando, porque ya no entiendo ni cuantas tablas están involucradas en la consulta...
¿Podrías cambiar el RIGTH por INNER en la consulta que te mandó Jaime?
Y si no funciona así, por favor, hacé algo parecido a lo que te mandé ayer, los datos de las tablas involucradas y el resultado esperado, me parece que sería un acto de consideración a nuestras neuronas.
Gracias, Liliana.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:comparacion de tablas

Publicado por carlos garcia (1 intervención) el 06/01/2005 14:41:39
hola liliana! como lo comente hace un momento utilizo solo dos tablas empleados y datos_generales esta es las sentencia que utilizo:

select distinct cedula from empleados WHERE NOT EXISTS (SELECT * FROM datos_generales where empleados.cedula = datos_generales.cedula)

si corres esta sentencia, sandran todas la cedulas que no existen en la tabla datos_generales bien! pero que pasa? en la tabla empleados no existe el campo llamado nombre, ni tampoco direccion, estos existen en la tabla datos_generales. ejemplo:

tabla: empleados I tabla: datos_generales
----------------------------------------------------------------
cedula,sueldo,DPT I nombre,cedula,direccion

si hago la consulta en SQL debe salir esto:
nombre,cedula,direccion,sueldo,DPT
es decir, hago la comparacion de tabla empleados con tabla datos_generales, como ven me debe mostrar datos tanto de una tabla como de otro...y ya!! como si fueera una sola tabla!

imaginate liliana como estare!!! yo estoy que me vuelvo loco yme estoy desesperando mas!!!! gracias!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:comparacion de tablas

Publicado por EnriqueK (69 intervenciones) el 06/01/2005 15:00:27
Si en la consulta obtienes los campos de la tabla1 que no estan en la tabla2, dime como quieres que te aparezcan datos de la tabla 2 si le estas diciendo que te extraiga los campos q no estan en ella, si le haces in inner, left, right o lo q fuera esos campos seran nulos, a menos que me digas que hay relacion entre ellos por otro campo clave q hasta el momento no has mencionado, al menos yo lo entiendo asi y no soy el unico ya q todos en el foro te dicen lo mismo NO SE TE ENTIENDE. Espero sepas bien que es lo que quieres y no extiendas mas este foro.

Atte.
EnriqueK
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:comparacion de tablas

Publicado por Liliana (426 intervenciones) el 06/01/2005 15:12:11
Carlos,
Si yo estoy creando tablas con datos supuestos, mostrandote las consultas y los datos obtenidos, también podrías hacerlo vos como te lo pedí antes.
Me parece que dos días y varias personas intentando ayudarte, tratando de adivinar lo que necesitás, merece una explicación clara del problema.
Por favor, no quisiera que lo malinterpretes, si seguimos con este hilo es porque tenemos la intención de solucionarte el problema, pero... no es simple así.
El problema no es el query sino que nos ubiques en tu situación.

create table #empleados
(cedula int, sueldo money, dpt char(20))
insert #empleados select 10, 123, 'NoSeQueEs'
insert #empleados select 20, 234, 'NoSeQueEs'

create table #datos_generales
(nombre char(20), cedula int, direccion char(20))
insert #datos_generales select 'Carlos', 1, 'Su casa'
insert #datos_generales select 'Jaime ', 2, 'La suya'

select distinct cedula from #empleados WHERE NOT EXISTS
(SELECT * FROM #datos_generales where #empleados.cedula = #datos_generales.cedula)
--Estas son las cédulas que no están en #datos_generales
cedula
-----------
10
20

Carlos, si no están, no podrás obtener el nombre de estas cédulas...
Intentando seguir con este ejercicio de adivinación...

select #empleados.cedula, nombre = ' ', direccion = ' '
from #empleados
left join #datos_generales on #empleados.cedula = #datos_generales.cedula
where #datos_generales.cedula is null
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:comparacion de tablas

Publicado por EnriqueK (69 intervenciones) el 06/01/2005 15:27:25
Entiendo el quiere datos de la tabla #datos_generales q no entiedo de donde los piensa sacar ya que como bien sabes que el resultado de los campo de la tabla #datos_generales seran null, entonces solo llego a concluir que lo que el desea hacer es algo mas que una simple consulta.
Le sugeriria que defina bien lo que desea y despues haga su consulta.

Atte.
EnriqueK
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar