Autor
|
Tema: [SQL] Problema con consulta (Leído 2,398 veces)
|
darknlee
Desconectado
Mensajes: 5
|
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
|
|
|
En línea
|
|
|
|
1mpuls0
Desconectado
Mensajes: 1.186
|
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
|
|
« Última modificación: 28 Enero 2014, 19:42 pm por Darhius »
|
En línea
|
abc
|
|
|
darknlee
Desconectado
Mensajes: 5
|
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,
|
|
|
En línea
|
|
|
|
Shell Root
|
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,
|
|
|
En línea
|
Te vendería mi talento por poder dormir tranquilo.
|
|
|
1mpuls0
Desconectado
Mensajes: 1.186
|
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 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)
|
|
« Última modificación: 29 Enero 2014, 00:44 am por Darhius »
|
En línea
|
abc
|
|
|
HdM
Desconectado
Mensajes: 1.674
|
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))
|
|
|
En línea
|
- Nice to see you again -
|
|
|
darknlee
Desconectado
Mensajes: 5
|
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.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Problema con una consulta SQL
Bases de Datos
|
_CrisiS_
|
2
|
3,176
|
18 Febrero 2010, 23:38 pm
por _CrisiS_
|
|
|
Problema con una consulta
PHP
|
TheMaker
|
1
|
2,181
|
20 Julio 2010, 15:49 pm
por MinusFour
|
|
|
Problema con consulta SQL
Java
|
.:UND3R:.
|
0
|
1,549
|
20 Octubre 2013, 03:44 am
por .:UND3R:.
|
|
|
Problema con consulta IF
Programación C/C++
|
jaxoR
|
3
|
2,116
|
2 Diciembre 2013, 15:31 pm
por jaxoR
|
|
|
problema con consulta
Bases de Datos
|
m@o_614
|
3
|
2,809
|
30 Mayo 2014, 17:06 pm
por elezekiel
|
|