Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Consulta

Estas en el tema de Consulta en el foro de Bases de Datos General en Foros del Web. Señores tengo estoy tratando de realizar la siguiente consulta SQL sobre postgres Las tablas son las siguientes: Tabla Usuarios : ----------------- / id_usuario / / ...
  #1 (permalink)  
Antiguo 16/09/2008, 15:17
 
Fecha de Ingreso: octubre-2007
Mensajes: 54
Antigüedad: 16 años, 7 meses
Puntos: 0
Consulta

Señores tengo estoy tratando de realizar la siguiente consulta SQL sobre postgres

Las tablas son las siguientes:
Tabla Usuarios :
-----------------
/ id_usuario /
/ nombreusuario /
/ nombres /
/ apellidos /
-----------------

Tabla Grupos
-----------------
/ id_grupo /
/ nombregrupo /
/ descripcion /
-----------------

Tabla gruposusuarios
-----------------
/ id_usuario /
/ id_grupo /

Y se quiere generar una consulta del siguiente tipo

u.nombreusuario | u.nombres | u.apellidos | g.nombregrupo |
-----------------------------------------------------------
fa61an | James | Bon | detective |


ahora bien el select no se como realizarlo.. llevo esto. pero no se que mas hacer

SELECT u.nombreusuario, u.nombres, u.apellidos, g.nombregrupo from usuarios u, grupos g, gruposusuarios gc where u.id_usuario=gc.id_usuario AND ;
  #2 (permalink)  
Antiguo 16/09/2008, 16:13
 
Fecha de Ingreso: junio-2008
Ubicación: Tarija
Mensajes: 79
Antigüedad: 15 años, 10 meses
Puntos: 0
Consulta en PostgreSQL

Podria ser de la siguiente forma:

Select Usuarios.nombreusuario,Usuarios.nombres,Usuarios.a pellidos,Grupos.nombregrupo
From (Usuarios Inner Join gruposusuarios On Usuarios.id_usuario=gruposusuarios.id_usuario)Inne r Join Grupos On gruposusuarios.id_grupo=Grupos.id_grupo

Supongo que id_usuario es llave primaria en Usuarios, id_grupo es llave primaria en Grupos y (id_usuario,id_grupo) son llaves foraneas y al mismo tiempo son llaves primarias en la tabla gruposusuarios.
  #3 (permalink)  
Antiguo 17/09/2008, 07:47
 
Fecha de Ingreso: octubre-2007
Mensajes: 54
Antigüedad: 16 años, 7 meses
Puntos: 0
Respuesta: Consulta

Perfecto muchísimas gracias !

La consulta funciona perfectamente, solo me asalta una duda, el orden en el que se realizo el inner join tiene una razón de ser ?. Y supongo que los paréntesis también.


Seguiré repasando esos conceptos sobre base de datos que aun no los asimilo del todo

Edit: existen usuarios que pertenecen a varios grupos, desearía que me muestre de la siguiente manera como explico a continuacion:


u.nombreusuario | u.nombres | u.apellidos | g.nombregrupo |
-----------------------------------------------------------
fa61an | James | Bon | detective, agente secreto, teniente |


se que se debe usar "group by grupos.nombregrupo" solo que me aparece error. alguna ayuda

Última edición por fa61an; 17/09/2008 a las 09:09
  #4 (permalink)  
Antiguo 18/09/2008, 06:44
 
Fecha de Ingreso: junio-2008
Ubicación: Tarija
Mensajes: 79
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Consulta

Bueno, respecto al inner join que esta dentro de los parentesis, junto o uno las tablas Usuarios y gruposusuarios y el resultado de esa union es otra tabla y a esa otra tabla le realizo una union o inner join con la tabla Grupos y da como resultado una sola tabla en la cual estan inmersas o unidas las tablas Usuarios, gruposusuarios y Grupos.

Respecto al otro caso, Group By se utiliza cuando tienes en tu select funciones de agregado, en este caso no estas trabajando con ellas. No tengo muy claro lo que quieres hacer y tendrias que aclararmelo un poco mas, pero supongo que lo que quieres es ordenarlas por grupo, si es asi, podrias usar la clausula "Order By Grupos.nombregrupo" al final de la consulta.

Select Usuarios.nombreusuario,Usuarios.nombres,Usuarios.a pellidos,Grupos.nombregrupo
From (Usuarios Inner Join gruposusuarios On Usuarios.id_usuario=gruposusuarios.id_usuario)Inne r Join Grupos On gruposusuarios.id_grupo=Grupos.id_grupo
Order By Grupos.nombregrupo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:58.