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

No se como hacer esta consulta....

Estas en el tema de No se como hacer esta consulta.... en el foro de Mysql en Foros del Web. Hola amigos(as) del foro necesito que me hecheis una mano con esta consulta os pongo el ejemplo tengo 2 tablas NOMBRES ------------- id - nombre ...
  #1 (permalink)  
Antiguo 17/10/2007, 15:58
 
Fecha de Ingreso: noviembre-2005
Mensajes: 16
Antigüedad: 18 años, 5 meses
Puntos: 0
No se como hacer esta consulta....

Hola amigos(as) del foro necesito que me hecheis una mano con esta consulta os pongo el ejemplo

tengo 2 tablas

NOMBRES
-------------
id - nombre - autor1 - autor2 - autor3
1 Juan - 4 - 1 - 3
2 Paolo - 1 - 3 - 2
3 Martin - 4 - 3 - 2

AUTORES
-----------
id - autor
1 - Ramon Garcia
2 - Juan Escudero
3 - Natalia Gil
4 - Gustavo Perez

y lo que desearia hacer es que al realizar la consulta por id mostrara lo siguente : ejemplo id = 1
devolveria

Juan - gustavo perez - ramon garcia - natalia gil

si id = 3

Martin - gustavo perez - natalia gil - juan escudero



Os agradecería mucho que me echéis un cable.
Muchas gracias de antemano.
  #2 (permalink)  
Antiguo 17/10/2007, 18:38
Avatar de Gabo77  
Fecha de Ingreso: noviembre-2006
Mensajes: 381
Antigüedad: 17 años, 4 meses
Puntos: 6
Re: No se como hacer esta consulta....

Si los campos de autores solo son 3 la cosa está fácil.


Código:
Select A.Id, A.Nombre, B.Autor As Autor1, C.Autor As Autor2, D.Autor As Autor3
From Nombres A
Inner Join Autores B
    On A.Autor1 = B.Id
Inner join Autores C
    On A.Autor2 = C.Id
Inner Join Autores D
    On A.Autor3 = D.Id
Where A.Id = 3
Sin embargo, esta consulta te obliga a que tengas siempre los 3 autores especificados. Suponiendo que este no siempre es tu caso, y que necesites mostrar los nombres incluso los que tienen menos de 3 autores (incluso ninguno) la siguiente consulta te ayudará.

Código:
Select A.Id, A.Nombre,
    IsNull(B.Autor, 'Sin Autor 1') As Autor1,
    IsNull(C.Autor, 'Sin Autor 2') As Autor2,
    IsNull(D.Autor, 'Sin Autor 3') As Autor3
From Nombres A
Left Join Autores B
    On A.Autor1 = B.Id
Left join Autores C
    On A.Autor2 = C.Id
Left Join Autores D
    On A.Autor3 = D.Id
Where A.Id = 3
Al cambiar la sentencia Inner por el Left, le pedimos al motor de BD que nos traiga los resultados de la tabla nombres, aun cuando no encuentre coincidencias con los registros de la tabla autores. Además le estamos agregando la funcion IsNull (que reempleaza los valores nulos por lo que le indiques en el segundo parámetro) debido a que si no encuentra una relación te devolverá ese campo en Nulo, cosa que no es muy bonita que digamos.

Si observas bien, puedes jugar con los INNER y los LEFT, haciendo que un autor en especifico sea o no obligatorio para el reporte que desees mostrar, es decir, puedes optar por cambiar solo un INNER por un LEFT, y la consulta trabajará de lo lindo....


Saludos!
__________________
Hicimos un pacto con Dios... El no desarrolla Sistemas y nosotros no hacemos milagros....
  #3 (permalink)  
Antiguo 18/10/2007, 02:43
 
Fecha de Ingreso: noviembre-2005
Mensajes: 16
Antigüedad: 18 años, 5 meses
Puntos: 0
Re: No se como hacer esta consulta....

Muchas gracias tio, voy a probarlo y creo que funcionara, muchas gracias ya te comentare :D
  #4 (permalink)  
Antiguo 18/10/2007, 07:36
Avatar de Gabo77  
Fecha de Ingreso: noviembre-2006
Mensajes: 381
Antigüedad: 17 años, 4 meses
Puntos: 6
Re: No se como hacer esta consulta....

De nada sobrino!!!

Saludos!
__________________
Hicimos un pacto con Dios... El no desarrolla Sistemas y nosotros no hacemos milagros....
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 10:28.