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:
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:
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
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.
SELECT u.id, u.nombre, u.apellidos
FROM users u
WHERE NOT EXISTS
(
SELECT NULL
FROM groups_users g
WHERE g.idusuario = u.id
)
UNION
SELECT u.id, u.nombre, u.apellidos
FROM users u, groups_users g WHERE u.id=g.idusuario AND g.idgrupo<>4
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,
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-
SELECT usu.Id, usu.Nombre, usu.Apellido FROM usuario usu LEFT JOIN grupo grp ON grp.idUsuario = usu.id
ó
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,
Cita de: darknlee en 28 Enero 2014, 19:06 PM
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.
Cita de: darknlee en 28 Enero 2014, 21:15 PM
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
SELECT u.id, u.nombre, u.apellidos
FROM users u
WHERE NOT EXISTS ( SELECT NULL FROM groups_users g WHERE g.idusuario = u.id )
UNION
SELECT u.id, u.nombre, u.apellidos FROM groups_users g, users u WHERE g.idusuario=u.id AND g.idgrupo!=1
AND g.idusuario NOT IN(
SELECT gu.idusuario FROM groups_users gu WHERE gu.idgrupo=1)
Otra opción podría ser:
SELECT id, nombre FROM Users
WHERE (id NOT IN (SELECT DISTINCT idUsuario FROM Groups_Users))
OR (id NOT IN (SELECT idUsuario FROM Groups_Users WHERE idGrupo=1))
Cita de: Darhius en 29 Enero 2014, 00:05 AM
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. ;-)