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

Consulta

Estas en el tema de Consulta en el foro de Mysql en Foros del Web. Hola a todos tengo una pequena duda que me esta matando la cabeza agradesco cualquier ayuda!!!. Tengo 2 tablas una llamada firmas y la otra ...
  #1 (permalink)  
Antiguo 21/07/2011, 09:27
Avatar de JeMaGa  
Fecha de Ingreso: julio-2011
Ubicación: Bogota
Mensajes: 430
Antigüedad: 12 años, 9 meses
Puntos: 4
Pregunta Consulta

Hola a todos tengo una pequena duda que me esta matando la cabeza agradesco cualquier ayuda!!!.

Tengo 2 tablas una llamada firmas y la otra llamada personas, la tabla llamada firmas tiene los siguientes campos

firmas----->
Cod.Doc
Version
Elabora
Fecha_Elabora
Revisa
fecha_Revisa
Aprueba
Fecha_Aprueba

y la tabla personas--->
Cod.Persona
Nombre_Persona
Cargo_Persona
Area

en el campo Elabora, Revisa, Aprueba se encuentran los id de cada persona, yo necesito que ingresando un Cod.Doc me muestre el Nombre_Persona que le corresponde a cada id de Elabora, Revisa, Aprueba , no se si me hice entender lo que quiero es que en ves de mostrarme los id, muestre el Nombre_Persona yo tengo esto pero no funciona no se me ocurre como mas se pueda

SELECT Nombre_Persona, Nombre_Persona, Nombre_Persona
FROM personas
INNER JOIN firmas ON firmas.Elabora = personas.Cod.Persona
AND firmas.Revisa = personas.Cod.Persona
AND firmas.Aprueba = personas.Cod.Persona
WHERE Cod.Doc = SER -02

Agradesco la ayuda
  #2 (permalink)  
Antiguo 21/07/2011, 09:57
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta

Hola JeMaGa:

al tener varios campos relacionados con la misma tabla puedes hacer varios INNER JOIN sobre esa tabla, utilizando un alias distinto para cada campo. creo que queda más claro con el ejemplo:

Código MySQL:
Ver original
  1. mysql> CREATE TABLE personas(Cod_Persona INT,
  2.     -> Nombre_Persona VARCHAR(15),Cargo_Persona VARCHAR(15),
  3.     -> AREA VARCHAR(15));
  4. Query OK, 0 rows affected (0.10 sec)
  5.  
  6. mysql> INSERT INTO personas VALUES
  7.     -> (1, 'persona uno', 'cargo uno', 'area uno'),
  8.     -> (2, 'persona dos', 'cargo dos', 'area dos'),
  9.     -> (3, 'persona tres', 'cargo tres', 'area tres');
  10. Query OK, 3 rows affected (0.08 sec)
  11. Records: 3  Duplicates: 0  Warnings: 0
  12.  
  13. mysql> SELECT * FROM personas;
  14. +-------------+----------------+---------------+-----------+
  15. | Cod_Persona | Nombre_Persona | Cargo_Persona | AREA      |
  16. +-------------+----------------+---------------+-----------+
  17. |           1 | persona uno    | cargo uno     | area uno  |
  18. |           2 | persona dos    | cargo dos     | area dos  |
  19. |           3 | persona tres   | cargo tres    | area tres |
  20. +-------------+----------------+---------------+-----------+
  21. 3 rows in set (0.00 sec)
  22.  
  23. mysql> CREATE TABLE firmas (Cod_Doc INT, VERSION VARCHAR(10),
  24.     -> Elabora INT, Fecha_Elabora DATE,
  25.     -> Revisa INT, Fecha_Revisa DATE,
  26.     -> Aprueba INT, Fecha_Aprueba DATE);
  27. Query OK, 0 rows affected (0.23 sec)
  28.  
  29. mysql> INSERT INTO firmas VALUES (1, '1.0',
  30.     -> 1, '2011-07-19',
  31.     -> 2, '2011-07-20',
  32.     -> 3, '2011-07-21');
  33. Query OK, 1 row affected (0.07 sec)
  34.  
  35. mysql> SELECT cod_doc, elabora, revisa, aprueba FROM firmas;
  36. +---------+---------+--------+---------+
  37. | cod_doc | elabora | revisa | aprueba |
  38. +---------+---------+--------+---------+
  39. |       1 |       1 |      2 |       3 |
  40. +---------+---------+--------+---------+
  41. 1 row in set (0.00 sec)
  42.  
  43. mysql> SELECT f.cod_doc, p1.nombre_persona elabora,
  44.     -> p2.nombre_persona revisa, p3.nombre_persona aprueba FROM firmas f
  45.     -> INNER JOIN personas p1 ON f.elabora = p1.cod_persona
  46.     -> INNER JOIN personas p2 ON f.revisa = p2.cod_persona
  47.     -> INNER JOIN personas p3 ON f.aprueba = p3.cod_persona;
  48. +---------+-------------+-------------+--------------+
  49. | cod_doc | elabora     | revisa      | aprueba      |
  50. +---------+-------------+-------------+--------------+
  51. |       1 | persona uno | persona dos | persona tres |
  52. +---------+-------------+-------------+--------------+
  53. 1 row in set (0.00 sec)

Observa que estoy haciendo 3 JOINS con la tabla personas, pero cada uno tiene un alias diferente, así puedo ligar cada campo por separado.

Dale un vistazo para ver si te sirve.

Saludos
Leo.
  #3 (permalink)  
Antiguo 21/07/2011, 10:33
Avatar de JeMaGa  
Fecha de Ingreso: julio-2011
Ubicación: Bogota
Mensajes: 430
Antigüedad: 12 años, 9 meses
Puntos: 4
Respuesta: Consulta

Hola leo dale muchas gracias por tu ayuda pero me sale error mira

SELECT p1.`Nombre_Persona `, p2.`Nombre_Persona`, p3

.`Nombre_Persona` FROM `firmas` f

INNER JOIN `personas` p1 ON f.`Elabora` = p1.`Cod.Persona`

INNER JOIN `personas` p2 ON f.`Revisa` = p2.`Cod_Persona`

INNER JOIN `personas` p3 ON f.`Aprueba`= p3.`Cod.Persona` ;


MySQL ha dicho:

#1054 - Unknown column 'p1.Nombre_Persona ' in 'field list'
  #4 (permalink)  
Antiguo 21/07/2011, 10:39
Avatar de JeMaGa  
Fecha de Ingreso: julio-2011
Ubicación: Bogota
Mensajes: 430
Antigüedad: 12 años, 9 meses
Puntos: 4
Respuesta: Consulta

lo estoy haciendo en phpmyadmin no se si por eso puede ser el error :(
  #5 (permalink)  
Antiguo 21/07/2011, 10:59
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Consulta

No, el problema es que estás dejando un espacio dentro del nombre de l campo:
Código MySQL:
Ver original
  1.     p1.`Nombre_Persona `, -- <--- Acá hay un espacio en el nombre.
  2.     p2.`Nombre_Persona`,
  3.     p3.`Nombre_Persona`
  4. FROM `firmas` f
  5.     INNER JOIN `personas` p1 ON f.`Elabora` = p1.`Cod.Persona`
  6.     INNER JOIN `personas` p2 ON f.`Revisa` = p2.`Cod_Persona`
  7.     INNER JOIN `personas` p3 ON f.`Aprueba`= p3.`Cod.Persona` ;

Cuando usas acentos inversos, MySQL interpreta literalmente lo que está allí, entonces no encuentra el campo, porque no coincide con lo que está guardado.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 21/07/2011, 11:10
Avatar de JeMaGa  
Fecha de Ingreso: julio-2011
Ubicación: Bogota
Mensajes: 430
Antigüedad: 12 años, 9 meses
Puntos: 4
Respuesta: Consulta

Ahora ya me sale otro error jajaja gracias

#1054 - Unknown column 'p2.Cod_Persona' in 'on clause'
voy a revisar gracias!!
  #7 (permalink)  
Antiguo 21/07/2011, 11:11
Avatar de JeMaGa  
Fecha de Ingreso: julio-2011
Ubicación: Bogota
Mensajes: 430
Antigüedad: 12 años, 9 meses
Puntos: 4
Respuesta: Consulta

Listo dale gracias ya el error era que tenia _ en ves de .

Etiquetas: campos, join, select, tabla
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 18:55.