SQL - consulta de muchos a muchos buscando un parámetro

 
Vista:

consulta de muchos a muchos buscando un parámetro

Publicado por dane-sd (3 intervenciones) el 25/10/2017 12:47:04
Hola. Estoy aprendiendo SAS, pero también permite usar SQL.

Tengo que hacer una consulta y no sé cómo hacerlo. Hay 3 tablas.
1 con id de usuario y nombre.
2 tiene la id del usuario y los roles que puede tener (son muchos, no solo una rol). El usuario 1 saldrá tantas veces como roles tenga.
3 tiene el id del rol y otro id que dice el tipo de rol (no te pone el rol, sino que es como una id).

Bien, tengo que crear una tabla con los roles de cada uno. El problema bien que como tienen más de un rol, no sé cómo seleccionar uno. Además, hay que buscar en la tabla 3 si tiene un tipo de rol es una cosa (administrador, por ejemplo), si no, es otra.

No sé si me he explicado bien. Espero que me ayudeis porque estoy muy perdido.
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
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

consulta de muchos a muchos buscando un parámetro

Publicado por Isaias (1921 intervenciones) el 25/10/2017 18:47:57
Si, a simple vista se ve que NO tienes experiencia en T-SQL, veamos (no dices como se llaman las columnas, las voy a inventar, ni las tablas)

1
2
3
4
5
6
7
8
9
SELECT
u.idusuario
u.usuario_nombre
r.descripcion_rol
FROM usuario u
inner join usurio_rol ur on u.idusuario = ur.idusuario
inner join rol r on ur.idrol = r.idrol
-- filtrar por rol
WHERE r.descripcion = 'sysadmin'
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

consulta de muchos a muchos buscando un parámetro

Publicado por dane-sd (3 intervenciones) el 25/10/2017 20:08:50
Gracias por responder.
No, no tengo experiencia en ello y estoy de prácticas, de becario. El problema es que me han puesto sólo a que me pelee con SQL con ejemplos de lo que suelen pedir los clientes y llevo varios días. No he dicho nombres de columnas ni tablas por temas de privacidad, aunque tienen nombres normales como usuario,como bien has puesto. Pero si hace falta, pongo unos inventados y los dibujo en paint para que quede más claro.

Pero, eso solo filtra el rol de un tipo, no? Es decir, sólo busca los usuarios que tengan ese rol, no? (pregunto porque lo estoy leyendo desde mi casa).
Yo necesito que aparezcan todos los usuarios (sin repetirse), además que, si un usuario tiene varios roles, sólo me interesa saber si es adm, clt u otros roles. En el caso de ser el primero, hace caso omiso al resto y su rol es administrador. En el segundo, si no es adm pero sí clt, que tenga el rol de cliente. Y si no tiene ninguno, que tenga otro rol (ahora no recuerdo qué tenía que poner).

Mi problema está en que pienso como si fuera Java y no tiene mucho parecido.
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
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

consulta de muchos a muchos buscando un parámetro

Publicado por Isaias (1921 intervenciones) el 26/10/2017 00:01:53
Como bien dices, el ejemplo, solo te FILTRA aquellos que sean ADMIN o algo parecido (sysadmin).

Los FILTROS, dependera de lo que busques, por ejemplo

WHERE ROL IN('adm', 'developer', 'backupOperator')

Aqui solo los roles que se mencionan, pero como te dije, al no conocer tus tablas, pues tengo que "inventar" y eso, a mi no se me da
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

consulta de muchos a muchos buscando un parámetro

Publicado por dane-sd (3 intervenciones) el 26/10/2017 08:25:15
Ok. Revisando mis apuntes de SQL encontré un ejemplo de lo que me comentas. Y cómo sería si no es ninguno de los dos primeros roles (ya que hay más de 60 en total), que sea otro rol diferente, por ejemplo, invitado? Poniendo una select dentro del where in que busque los roles diferentes a esas dos?

Gracias por tus respuestas, me estás ayudando mucho a recordar lo que estudié de SQL.
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
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

consulta de muchos a muchos buscando un parámetro

Publicado por Isaias (1921 intervenciones) el 26/10/2017 17:59:20
Entonces cambias de IN, por NOT IN('este', 'otro','mas','etc')
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