SQL - Ayuda buscar subconjuntos de conjunto

 
Vista:

Ayuda buscar subconjuntos de conjunto

Publicado por Chuse (2 intervenciones) el 01/06/2007 16:11:54
Hola. Necesito ayuda con una búsqueda, ya que no se como hacerla de una forma sencilla y mínimamente elegante. El problema:
tengo una tabla relacionando perfiles y opciones, de forma que tengo los siguientes perfiles con su correspondiente conjunto de opciones: 1={1,2,3,4,5}, 2={1,2,3,4}, 3={1,2,3}, 4={1,2} y 5={1}.
Necesito, a partir de un código de perfil, buscar los perfiles que tienen las mismas opciones o un subconjunto de ellas. Es decir, si busco por el perfil 3, debería mostrarme los códigos de perfil 3,4 y 5. Si busco por perfil 1 pues me mostraría todos.
La forma en que se guardan los datos en la tabla es esta:
perfil opcion
1 1
1 2
1 3
1 4
1 5

Por si hay algún problema, no pido la query exacta, sino alguna orientación como el tipo de join que habría que utilizar, por ejemplo, o alguna otra pista que me sirva de guía.
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:Ayuda buscar subconjuntos de conjunto

Publicado por Isaías (5072 intervenciones) el 01/06/2007 18:01:33
¿Que base de dato estas ocupando?
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:Ayuda buscar subconjuntos de conjunto

Publicado por Chuse (2 intervenciones) el 01/06/2007 18:25:56
Estoy utilizando DB2, si te refieres a eso.
He conseguido lo que queria utilizando una query como esta:

SELECT DISTINCT(perfil)
FROM DBO.TITAN_PERFIL_OPCION
WHERE opcion IN (SELECT opcion FROM usuario_perfil up, perfil_opcion po
WHERE up.perfil=po.perfil AND up.usuario='USER')
AND perfil NOT IN (SELECT DISTINCT(perfil) FROM perfil_opcion
WHERE opcion NOT IN (SELECT opcion
FROM usuario_perfil up, perfil_opcion po
WHERE up.perfil=po.perfil AND up.usuario='USER'))

, buscando a partir del perfil que tiene asignado el usuario USER.
Sin embargo, no me parece una forma muy "elegante" de hacerlo. Si puedes decirme una forma mejor te lo agradecería.
Un saludo.
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