SQL - Intersec

 
Vista:

Intersec

Publicado por George (2 intervenciones) el 14/08/2009 03:51:21
Hola a todos,
tengo una pregunta, si pudieran colborarme...
A ver como lo explico...

Tengo una tabla llena de registros (de primer nivel, por asi decirles) y estos registros a su vez tienen x numero de otros registros (de segundo nivel) asociados a cada uno de estos, el inconveniente que tengo es que yo le paso a la sentencia n numero de registros (primer nivel) y necesito retornar unicamente los registros (segundo nivel) comunes en todos los de primer nivel.
Un poco enredado, pero aver, haciendo una homologia...
Seria una especie de INTERSECT pero no entre dos tablas.

Soy nuevo en esto y agradeceria mucho una ayuda.
Si necesitan algo mas me avisan, Gracias
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:Intersec

Publicado por Rolando (28 intervenciones) el 17/08/2009 19:36:48
select * from tabla tablaNivel2 A where campoComun
in ( select campocomun from tablaNivel1 B Where ..... )

aqui seleccionas todo lo del segundo nivel que este contenido en el primedo con los criterios que le pongas solo filtrara lo que este dentro del IN

saludos

Rolando Lau
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:Intersec

Publicado por gVetto (2 intervenciones) el 18/08/2009 15:01:04
Hola Rolando

Creo que en tu solucion existen dos tablas, mi problema es que necesito retornar los valores comunes pero todo esto esta en una sola tabla.

Supongamos este ejemplo:

TABLE_X
Tengo un registro REG_A, REG_B y REG_C.
Cada uno de estos registros tiene asociados diferentes registros de segundo nivel(por asi llamarlos)

REG_A(reg_1, reg_2, reg_3, reg_4, reg_5).
REG_B(reg_2, reg_4, reg_5, reg_6, reg_7).
REG_C(reg_4, reg_5, reg_7, reg_8, reg_9).

Los valores entre parentesis son los que pertenecen a cada uno de los registros de primer nivel.

Lo que quiero poder retornar es los registros de segundo nivel comunes en todos, como la interseccion de los conjuntos, asi el resultaso que quiero es:

Resultado: reg_2, reg_4, reg_5.

Recuarda que todo esta en una sola tabla.

Gracias espero me haya hecho entender.
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:Intersec

Publicado por rolando (1 intervención) el 18/08/2009 21:26:33
No te entendi muy bien :

Solo que TABLA_X es una tabla hasta ahi bien

Ahora los campos de esa tabla cuales son??? REG_A, REG_B y REG_C.

una tabla de 3 campos???

o es que cada uno denota un Registro ( horizontal) y la tabla TABLA_X tiene 5 campos????

explica esta parte por favor ..

que campos tiene la tabla y cuales son los datos que graba.

lo que quieres ya lo entendi , quieres saber que datos se repiten ...en los 3 registros o en las 3 columnas ...

Explicalo mejor

Saludos

Rolando Lau
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:Intersec

Publicado por Antonio (17 intervenciones) el 28/08/2009 12:00:52
Pon los registros de segundo nivel en otra tabla distinta, piensa un poquito, y veras como se simplifica la consulta. Utiliza la sentencia JOIN para realizarla.

Ejemplo:

select c1,c2,.... from nivel2

inner join nivel1 on

nivel2.id=nivel1.id

A la hora de diseñar una DB, es muy importante no mezclar conceptos distintos en una misma tabla, por ejemplo:

El modelo de datos de una factura:

Deberá tener 2 tablas

Una donde estará la entidad FACTURA, y otra con las LINEAS de factura

La primera tiene 1 relación de 1 -> 1, y la segunda de 1 -> n , por eso no pueden estar juntas en la misma tabla.
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