SQL - Diferencia entre tablas para un id

 
Vista:
Imágen de perfil de Martin
Val: 4
Ha disminuido su posición en 7 puestos en SQL (en relación al último mes)
Gráfica de SQL

Diferencia entre tablas para un id

Publicado por Martin (2 intervenciones) el 06/10/2018 00:52:07
buen dia para todos! tengo una consulta que capaz es sencilla pero no me esta saliendo.

tengo 2 tablas.
tabla perfiles:
ID | DESCRIPCION
1 | administrador
2 | supervisor
3 | operario

tabla Modulo_perfil
IDMODULO | IDPERFIL
1 | 1
1 | 2
2 | 1
2 | 3
3 | 1

es decir, para el modulo 1, tienen permisos el perfil 1 y 2, para el modulo 2, el 1 y el 3 y para el 3, solo el perfil 1.

necesito un select que me traiga los perfiles que no pueden acceder a cada modulo, o sea, para el modulo 1, me tendria que traer solo el 3, para el 2, el 2 y para el 3, el 2 y 3. y no puedo conseguirlo,

gracias
saludos
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

Diferencia entre tablas para un id

Publicado por Isaias (1921 intervenciones) el 06/10/2018 02:05:48
Manejo de conjuntos, regresemos a la secundaria.

Tengo dos conjuntos MODULOS y PERFILES, deseo saber que PERFILES no tienen asignado un MODULO

1
SELECT ID FROM MODULO WHERE IDPERFIL NOT EXISTS(SELECT ID FROM PERFILES)

¿Es correcto?
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 gilman
Val: 184
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Diferencia entre tablas para un id

Publicado por gilman (103 intervenciones) el 06/10/2018 09:19:03
No, no es correcto
Para el caso de un módulo concreto (con IDMODULO elModulo) prueba:
1
SELECT ID FROM PERFILES WHERE ID NOT IN (SELECT IDPERFIL FROM MODULOPERFIL WHERE IDMODULO=elModulo)
o
1
SELECT ID FROM PERFILES WHERE ID NOT EXISTS(SELECT IDPERFIL FROM MODULOPERFIL WHERE IDMODULO=elModulo)
Si lo que queremos es una consulta que devuelva todos los módulos con los perfiles que no tienen acceso a cada módulo, suponiendo que hay un tabla MODULOS con un campo ID, prueba:
1
2
3
SELECT MODULO.ID IDMODULO, PERFILES.ID IDPEFIL
FROM MODULOS, PERFILES
WHERE PERFILES.ID NOT IN (SELECT IDPERFIL FROM MODULOPERFIL WHERE IDMODULO=MODULOS.ID)
o
1
2
3
SELECT MODULO.ID IDMODULO, PERFILES.ID IDPEFIL
FROM MODULOS, PERFILES
WHERE PERFILES.ID NOT EXISTS (SELECT IDPERFIL FROM MODULOPERFIL WHERE IDMODULO=MODULOS.ID)
Dependiendo del motor de la base de datos puede que tengas que hacer algún cambio
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Martin
Val: 4
Ha disminuido su posición en 7 puestos en SQL (en relación al último mes)
Gráfica de SQL

Diferencia entre tablas para un id

Publicado por Martin (2 intervenciones) el 06/10/2018 14:40:56
Gracias a ambos!!!
exactamente lo que necesitaba era la primer opcion (SELECT ID FROM PERFILES WHERE ID NOT IN (SELECT IDPERFIL FROM MODULOPERFIL WHERE IDMODULO=elModulo)) y no me salia.

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
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

Diferencia entre tablas para un id

Publicado por Isaias (1921 intervenciones) el 09/10/2018 04:46:57
SQL SERVER

Dependiendo del numero de registros, el IN (SELECT.....) le puede dar muchos dolores de cabeza, cambie por EXISTS y NOT EXISTS.
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