Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: darknlee en 28 Enero 2014, 19:06 pm



Título: [SQL] Problema con consulta
Publicado por: darknlee en 28 Enero 2014, 19:06 pm
Hola quería ver si me podéis echar una mano con una consulta SQL que me está costando sacar.
Tengo 2 tablas, Users y Groups_Users

Tabla Users: id, nombre, apellidos etc.
Tabla Groups_Users: idGrupo, idUsuario

El caso es que necesito obtener los usuarios que NO estén en ningún grupo o que estén en el grupo distinto al especificado. La consulta que estoy utilizando es la siguiente pero no me funciona:

Código:
SELECT u.id, u.nombre  FROM [Users] u LEFT JOIN Groups_Users g ON u.id=g.idUsuario WHERE g.idUsuario IS NULL OR g.idGrupo<>1;
//Por ejemplo

La primera parte es correcta porque me trae los que no están en ningún grupo, es decir hasta aquí bien:
Código:
SELECT u.id, u.nombre  FROM [Users] u LEFT JOIN Groups_Users g ON u.id=g.idUsuario WHERE g.idUsuario IS NULL

La segunda parte es en la que tengo problemas.

PD: Estoy en SQL Server.

Un saludo


Título: Re: [SQL] Problema con consulta
Publicado por: 1mpuls0 en 28 Enero 2014, 19:32 pm
Podrías colocar un ejemplo para poder ver que es lo que necesitas exactamente.

Por lo que entiendo, esto debe funcionarte a menos que te yo este mal entendiendo el problema o no lo hayas explicado correctamente.

Código
  1. SELECT  u.id, u.nombre, u.apellidos
  2. FROM    users u
  3. WHERE   NOT EXISTS
  4.        (
  5.        SELECT  NULL
  6.        FROM    groups_users g
  7.        WHERE   g.idusuario = u.id
  8.        )
  9. UNION
  10. SELECT u.id, u.nombre, u.apellidos
  11. FROM users u, groups_users g WHERE u.id=g.idusuario AND g.idgrupo<>4
  12.  


Título: Re: [SQL] Problema con consulta
Publicado por: darknlee en 28 Enero 2014, 21:15 pm
Hola Darhius, antes de nada te agradezco mucho la respuesta, voy a poner un ejemplo porque igual no me he explicado correctamente.

Tengo el siguiente registro en la tabla Users:

id     Nombre     Apellidos
------------------------------ 
1   Perico    Palotes
2      Paco           Gómez
3      Roberto      García

En la tabla Groups_Users ( 1 usuario puede pertecenecer a 0 o a muchos grupos)

idGrupo   idUsuario
----------------------
1                1
2                3
3                1


Lo que quiero es realizar una consulta que me devuelva tanto los usuarios que no están en ningún grupo como los que no pertenecen a un grupo determinado, es decir que si lanzo la consulta de tal forma que me de los usuarios que no pertenecen al grupo 1 y a ningún grupo me de la siguiente salida:

id     Nombre     Apellidos
------------------------------ 
2      Paco           Gómez
3      Roberto      García

(omitiendo al usuario con id 1 porque uno de los grupos a los que pertenece es el grupo 1)

Un saludo,



Título: Re: [SQL] Problema con consulta
Publicado por: Shell Root en 28 Enero 2014, 21:21 pm
No recuerdo mucho esto, pero espero no ser un tonto al decir que: quizás con un LEFT JOIN o RIGHT JOIN puedas obtener esos resultados. Es decir, -dependiendo del canal de retorno-
Código
  1. SELECT usu.Id, usu.Nombre, usu.Apellido FROM usuario usu LEFT JOIN grupo grp ON grp.idUsuario = usu.id
ó
Código
  1. SELECT usu.Id, usu.Nombre, usu.Apellido FROM usuario usu RIGHT JOIN grupo grp ON grp.idUsuario = usu.id

Pruba a ver que canal es,


Título: Re: [SQL] Problema con consulta
Publicado por: 1mpuls0 en 29 Enero 2014, 00:05 am
El caso es que necesito obtener los usuarios que NO estén en ningún grupo o que estén en el grupo distinto al especificado.

e quiero es realizar una consulta que me devuelva tanto los usuarios que no están en ningún grupo como los que no pertenecen a un grupo determinado, es decir que si lanzo la consulta de tal forma que me de los usuarios que no pertenecen al grupo 1 y a ningún grupo me de la siguiente salida:

Ten más cuidado con lo que escribes porque se puede mal interpretar, tal y como lo hice yo.. por eso pedía un ejemplo, bueno ahora que lo tengo veamos que se puede hacer.



Edito:

Segun yo, con esto debe quedar xD

Código
  1. SELECT  u.id, u.nombre, u.apellidos
  2. FROM    users u
  3. WHERE   NOT EXISTS ( SELECT  NULL FROM    groups_users g WHERE   g.idusuario = u.id )
  4. UNION
  5. SELECT u.id, u.nombre, u.apellidos  FROM groups_users g, users u WHERE g.idusuario=u.id AND g.idgrupo!=1
  6. AND g.idusuario NOT IN(
  7. SELECT gu.idusuario FROM groups_users gu WHERE gu.idgrupo=1)
  8.  


Título: Re: [SQL] Problema con consulta
Publicado por: HdM en 29 Enero 2014, 12:26 pm
Otra opción podría ser:

Código
  1. SELECT id, nombre  FROM Users
  2. WHERE (id NOT IN (SELECT DISTINCT idUsuario FROM Groups_Users))
  3. OR (id NOT IN (SELECT idUsuario FROM Groups_Users WHERE idGrupo=1))


Título: Re: [SQL] Problema con consulta
Publicado por: darknlee en 29 Enero 2014, 14:19 pm
Ten más cuidado con lo que escribes porque se puede mal interpretar, tal y como lo hice yo.. por eso pedía un ejemplo, bueno ahora que lo tengo veamos que se puede hacer.

Toda la razón, es que me pasé de sol a sol programando y ya no sé ni lo que puse.

Muchísimas gracias a todos por vuestra ayuda, especialmente a ti Darhius ahora si que si. ;-)