SQL - Ayudaaaaa...filtrar en dos tablas

 
Vista:

Ayudaaaaa...filtrar en dos tablas

Publicado por César (4 intervenciones) el 13/01/2012 20:20:49
Hola a todos, tengo mucha fé en que alguno de uds me pueda ayudar :P

mi problema...tengo dos tablas digamos T1 y T2, lo que me gustaría hacer es hacer es generar un conjunto de registros que estén en T1 pero no en T2, alguien sabe como hacerlo?

hice el intento usando inner join pero si pongo <> no resulta (probe con unas tablas pequeñas para ver que pasaba y me tiraba muchos mas registros de los que a simple vista debiera obtener...)

eso, ojalá me puedan ayudar :)
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
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Ayudaaaaa...filtrar en dos tablas

Publicado por leonardo_josue (1173 intervenciones) el 13/01/2012 22:55:03
Hola Cesar:

Tienes bastantes formas de hacer tu consulta, dependiendo sobre si que DBMS estás utilizando. La solución estándar sería utilizar NOT EXISTS, en palabras pondrías la consulta así:

SELECCIONAR todos los campos DE T1 DONDE NO EXISTAN elementos en T2 idénticos a T1:

la cláusula EXISTS te permite comparar múltiples campos, es decir si la igualdad más de un campo, por ejemplo

1
2
3
4
5
6
7
8
9
10
11
T1
id|descripcion
-------------------------
1|uno
2|dos
 
T2
id|descripcion
-------------------------
1|uno
2|otro dos


En este caso el segundo no se puede decir que el registro 2 exista en ambas tablas, pues en una aparece como "DOS" y en otra como "OTRO DOS".

Si la igualdad la da solo un campo, podrías también utilizar NOT IN, pero esta como te repito se limita solo a un campo. Finalmente podrías hacer el filtrado con un LEFT JOIN entre las tablas, filtrando sólo aquellos registros en donde no se pudo hacer la unión con algún elemento de la tabla 2, es decir si pones SELECT T1.campo, T2.Campo, este último regresará como vacío

Ahora bien, algunos DBMS manejan sentencias especiales para el manejo de conjuntos como por ejemplo SQL Server proporciona los operadores EXCEPT e INTERSECT... ORACLE tiene el operador MINUS, etc. sería cuestión de que investigues si tu BD soporta alguna de estas alternativas.

Como vez, son muchos los caminos para resolver tu problema, es cuestión de que intentes hacerlo y si continuas sin poder realizarlo, coloca algo del código que haz intentado hacer para ayudarte a afinar la sentencia

Saludos
Leo.
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

Ayudaaaaa...filtrar en dos tablas

Publicado por César (4 intervenciones) el 16/01/2012 12:54:08
te pasaste!!, intentaré hacer lo que comentas, cuando me salga, por si alguien está en las mismas que yo le salga rápido, lo bueno es que siempre se sigue aprendiendo, gracias nuevamente, 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

Ayudaaaaa...filtrar en dos tablas

Publicado por César (4 intervenciones) el 17/01/2012 14:57:11
Estimado!!, me resultó con lo que me decias tanto con Not In como con Not exist, lo comprobé copiando la base y borrando a mano un par de registros registro eso si ahora tengo un nuevo problema :S,
ya no me funciona el comando rs.MoveNext, pero en el último, normalmente cuando hacía una consulta usaba este comando para moverme en los registros, pero ahora sólo funciona hasta antes del último, al hacer sub consultas el moverse de regstros tiene un tratamiento diferente??

de antemano muuuchas gracias!!

PD: no se si sirva el dato pero estoy trabajando desde visual basic en un excel con este provider Microsoft.ACE.OLEDB.12.0
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

Ayudaaaaa...filtrar en dos tablas

Publicado por César (4 intervenciones) el 17/01/2012 19:32:52
buscando y con mucha ayuda logre hacer lo que quería mediante LEFT OUTER JOIN y resulta super bien, ahora, cuando lo probé con la base en la que necesito trabajar me lanza un error debido a que el campo tiene formato "memo" y al intentar cambiar de formato (intente con texto xq estaba asi en la base de prueba) no me deja por memoria y se me agotaron las ideas :(
intente lo del formato copiando ese campo en otra base pero me copia el formato memo tambien...ayudaaaaaaaa
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