Ayuda Urdente con Sub-Querys

Buenas tardes, tengo el siguiente problema, por ejemplo tengo estas tablas (solo escribo los campos que son relevantes de las mismas):
USUARIO (LoginUsuario)
PERFIL (IdPerfil)
USUARIO_PERFIL(LoginUsuario, IdPerfil)
Esto con el detalle de que cada usuario puede tener N perfiles.
Ahora mi problema es el siguiente: Yo quiero mandar un LoginUsuario a un stored procedure y devolver todos los usuarios que tengan los mismos perfiles que el que mande (no importa si estos tienen más perfiles pero como mínimo deben tener los mismos.
Ilustro un poco más mi problema tengo los siguientes datos (separados por punto y coma ";")
USUARIOS: A ; B ; C ; D
PERFILES: 1 ; 2 ; 3 ; 4 ; 5 ; 6
USUARIOS_PERFILES: (A , 1) ; (A , 2) ; (B , 1) ; (B , 2) ; (C , 1) ; (D , 2)
y el siguiente query:
SELECT DISTINCT LoginUsu
FROM UsuarioPerfil UP1
WHERE (IdPerfil in
(SELECT DISTINCT IdPerfil
FROM UsuarioPerfil UP2
WHERE (LoginUsuario = 'A')))
Eso me devolvería a los usuarios B(por tener los mismos perfiles) pero también al C y al DE por tener al menos un perfil en común (eso es por el in del query pero si pongo igual cuando hay algún registro que tenga más de una coincidencia da error). ¿Qué me recomiendan para solucionar este problema? (Con sub-query o con lo que sea), de ante mano muchísimas gracias por sus respuestas.

1 respuesta

Respuesta
1
SELECT LoginUsuario FROM USUARIOS_PERFILES AS USRS INNER JOIN
(SELECT idPerfil FROM USUARIOS_PERFILES WHERE LoginUsuario = 'A') AS USR
ON USRS.idPerfil=USR.idPerfil
GROUP BY LoginUsuario
Lo que hace esta consulta es:
1º Una subconsulta donde obtengo los perfiles del usuario A, por ejm.
2º Uno esta consulta con la tabla USUARIOS_PERFILES por el idPerfil, para obtener todos los registros que tengan el idPerfil de mi subconsulta.
3º Los agrupo para que no se repitan.
Espero que te sirva (y que funcione, ya que no lo he probado... je je)
He contestado esta pregunta ya hace 7 días.
La doy por contestada.
Buen día amigo, no esta resuelta, la solución que distes no funciona, como tu dijiste no la probaste si te das el trabajo de probarla te darás cuenta que no funciona, de igual forma gracias.
Disculpa,
Tienes razón, tenia que haberlo probado.
Este si lo he probado, y funciona (eso si, si A=1,2,3 y B=1,2,3,4 y buscas por A, entonces obtendrás A y B, si buscas por B entonces no, ya que A no tiene 4.
Es decir, si buscas por A obtendrás todos los que tengan COMO MÍNIMO los mismos perfiles que A.
A ver si te sirve:

SELECT codUsuario FROM USUARIOS_PERFILES WHERE codPerfil IN
(select codPerfil from USUARIOS_PERFILES where codUsuario='A')
GROUP BY codUsuario
HAVING count(*) = (select count(*) from USUARIOS_PERFILES where codUsuario='A')

Dime algo.
Excelente amigo, ya había conseguido una solución pero un poco más
fumada y larga, pero gusta más la tuya me parece más optima, gracias,
el único detallito es que a la tuya hacia falta agregarle que no
repitiera el usuario que le estas mandando, por ejemplo si buscas A que
solo te devuelva B en vez de devolver A, B. De igual forma gracias muy
buena solución la verdad que ni me paso por la mente hacerla así, ahora
si la doy por finalizada.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas