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

como usar el join con mas de dos tablas

Estas en el tema de como usar el join con mas de dos tablas en el foro de Mysql en Foros del Web. buenas soy nuevo en todo esto mi pregunta es como pudo usar el join con mas de dos tablas ya que yo lo hago pero ...
  #1 (permalink)  
Antiguo 11/07/2012, 06:52
Avatar de trofserpiente  
Fecha de Ingreso: julio-2012
Ubicación: Lerida
Mensajes: 220
Antigüedad: 12 años, 4 meses
Puntos: 1
Exclamación como usar el join con mas de dos tablas

buenas soy nuevo en todo esto mi pregunta es como pudo usar el join con mas de dos tablas ya que yo lo hago pero con dos y necesito realizar una una consulta donde intervienen 3 tablas ojala me puedan ayudar
__________________
Luis Alfonso Cruz Valbuena
[email protected]
  #2 (permalink)  
Antiguo 11/07/2012, 07:24
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: como usar el join con mas de dos tablas

Por ejemplo:

Dos tablas:
Código MySQL:
Ver original
  1. SELECT T1.a, T1.b, T2.c, T2.d
  2.     T1
  3.     INNER JOIN T2 ON T1.a = T2.a;
Tres tablas:
Código MySQL:
Ver original
  1. SELECT T1.a, T1.b, T2.c, T2.d
  2.     T1
  3.     INNER JOIN T2 ON T1.a = T2.a
  4.     INNER JOIN T3 ON T2.e = T3.e;
Cuatro tablas:
Código MySQL:
Ver original
  1. SELECT T1.a, T1.b, T2.c, T2.d
  2.     T1
  3.     INNER JOIN T2 ON T1.a = T2.a
  4.     INNER JOIN T3 ON T2.e = T3.e
  5.     INNER JOIN T4 ON T3.f = T4.f;
¿Se entiende el concepto?
Detalle: Las tablas en realidad no necesariamente van como una cadena de tipo
T1 -> T2 -> T3...
sino que van vinculados los campos de acuerdo a las relaciones definidas en su diseño de tablas.
Buen podrían ser:
Código MySQL:
Ver original
  1. SELECT T1.a, T1.b, T2.c, T2.d
  2.     T1
  3.     INNER JOIN T2 ON T1.a = T2.a
  4.     INNER JOIN T3 ON T1.a = T3.e
  5.     INNER JOIN T4 ON T2.f = T4.f;
o cualquier otro requerido por el diseño de la base y la consulta.
Lo que debes tener en cuenta es que los INNER JOIN resulten lógicamente correctos. En ocasiones los resultados parecen estar mal, o tardar mucho tiempo, porque el orden de las tablas es incorrecto, o bien porque la relación produce productos cartesianos por estar mal planteada.
Sólo la experiencia te ayuda a saber cómo resolver esos problemas. No hay reglas absolutas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 11/07/2012, 12:58
Avatar de trofserpiente  
Fecha de Ingreso: julio-2012
Ubicación: Lerida
Mensajes: 220
Antigüedad: 12 años, 4 meses
Puntos: 1
Respuesta: como usar el join con mas de dos tablas

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Por ejemplo:

Dos tablas:
Código MySQL:
Ver original
  1. SELECT T1.a, T1.b, T2.c, T2.d
  2.     T1
  3.     INNER JOIN T2 ON T1.a = T2.a;
Tres tablas:
Código MySQL:
Ver original
  1. SELECT T1.a, T1.b, T2.c, T2.d
  2.     T1
  3.     INNER JOIN T2 ON T1.a = T2.a
  4.     INNER JOIN T3 ON T2.e = T3.e;
Cuatro tablas:
Código MySQL:
Ver original
  1. SELECT T1.a, T1.b, T2.c, T2.d
  2.     T1
  3.     INNER JOIN T2 ON T1.a = T2.a
  4.     INNER JOIN T3 ON T2.e = T3.e
  5.     INNER JOIN T4 ON T3.f = T4.f;
¿Se entiende el concepto?
Detalle: Las tablas en realidad no necesariamente van como una cadena de tipo
T1 -> T2 -> T3...
sino que van vinculados los campos de acuerdo a las relaciones definidas en su diseño de tablas.
Buen podrían ser:
Código MySQL:
Ver original
  1. SELECT T1.a, T1.b, T2.c, T2.d
  2.     T1
  3.     INNER JOIN T2 ON T1.a = T2.a
  4.     INNER JOIN T3 ON T1.a = T3.e
  5.     INNER JOIN T4 ON T2.f = T4.f;
o cualquier otro requerido por el diseño de la base y la consulta.
Lo que debes tener en cuenta es que los INNER JOIN resulten lógicamente correctos. En ocasiones los resultados parecen estar mal, o tardar mucho tiempo, porque el orden de las tablas es incorrecto, o bien porque la relación produce productos cartesianos por estar mal planteada.
Sólo la experiencia te ayuda a saber cómo resolver esos problemas. No hay reglas absolutas.
No le entiendo.por que en select usted pone solo dos tablas y en el join si muestra las tres. Igual. No me ha servido los ejemplos
__________________
Luis Alfonso Cruz Valbuena
[email protected]
  #4 (permalink)  
Antiguo 11/07/2012, 13:18
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: como usar el join con mas de dos tablas

Lo que te he posteado es una muestra genérica de cómo se usa el INNER JOIN con dos, tres y cuatro tablas. En ese sentido, lo que te he puesto es eficiente.
En cuanto a las columnas que puse en el SELECT es absolutamente irrelevante para el ejemplo si te invoco datos de una tabla o de todas las tablas. No le agrega ni le saca nada a la efectividad de los INNER JOIN, porque si no existen datos relacionados entre las tablas, de todos modos las que pongo tampoco saldrían. Podría cambiar todos esos nombres por un "*" y el resultado sería el mismo
Si no lo estás entendiendo, el problema no está en el ejemplo, sino en la falta de experiencia con esta cláusula.

Por cierto: La próxima vez trata de escribir de un modo un poco más cortés. Decir "No me ha servido los ejemplos", resulta muy seco, casi despectivo. Además no me dice nada sobre qué problema te plantea.
Yo estoy poniendo ganas en mostrarte cómo se hace. Por lo tuyo de tu parte.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 11/07/2012, 13:33
 
Fecha de Ingreso: junio-2011
Mensajes: 7
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: como usar el join con mas de dos tablas

Cita:
Iniciado por trofserpiente Ver Mensaje
buenas soy nuevo en todo esto mi pregunta es como pudo usar el join con mas de dos tablas ya que yo lo hago pero con dos y necesito realizar una una consulta donde intervienen 3 tablas ojala me puedan ayudar
Aka un ejemplo

Código MySQL:
Ver original
  1. SELECT TBL_PRODUCTO.NOMBRE, TBL_PROVEEDOR.NOMBRE, DESCRIPCION FROM TBL_PRODUCTO
  2. INNER JOIN TBL_PROVEEDOR ON TBL_PRODUCTO.ID_PROVEEDOR = TBL_PROVEEDOR.ID_PROVEEDOR

no se si este mas entendible tienes que tener algun vinculo o enlace entre las dos tablas como el foreign key
  #6 (permalink)  
Antiguo 11/07/2012, 13:37
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: como usar el join con mas de dos tablas

Es exactamente lo mismo que el primer caso que yo te puse.
Si entiendes ese, deberías entender el que yo postee.

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 11/07/2012, 13:52
Avatar de trofserpiente  
Fecha de Ingreso: julio-2012
Ubicación: Lerida
Mensajes: 220
Antigüedad: 12 años, 4 meses
Puntos: 1
Exclamación Respuesta: como usar el join con mas de dos tablas

Por cierto: La próxima vez trata de escribir de un modo un poco más cortés. Decir "No me ha servido los ejemplos", resulta muy seco, casi despectivo. Además no me dice nada sobre qué problema te plantea.
Yo estoy poniendo ganas en mostrarte cómo se hace. Por lo tuyo de tu parte.[/QUOTE]

gnzsoloyo que pena, lo que escribi no era para ofender a nadie y pido disculpas si eso fue lo que logre disculpeme, lo que quise decir era que habia acoplado los ejemplos a mi necesidad y no me an servido es que habeces soy muy torpe al escribir y es verdad que me hace falta experiencia
__________________
Luis Alfonso Cruz Valbuena
[email protected]
  #8 (permalink)  
Antiguo 11/07/2012, 13:57
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: como usar el join con mas de dos tablas

Bueno, postea el código de las consultas que has intentado...
Será más fácil guiarte viendo lo que has hecho.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 11/07/2012, 14:02
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: como usar el join con mas de dos tablas

Hola trofserpiente:

También tuve la misma sensación cuando leí tus comentarios que lo que comenta gnzsoloyo, pero me da gusto que aclares esa situación.

En tu post dices que:

Cita:
habia acoplado los ejemplos a mi necesidad y no me an servido
En qué sentido no te sirvieron los ejemplos? es decir la consulta que trataste de poner marcó algún error?, si es así ¿qué error es el que marcó? Si la consulta no arrojó los resultados esperados, entonces puede ser que los JOIN's no sean la solución, tendrías que comenzar por describirnos cómo son tus tablas, poner algunos datos de ejemplo y decirnos qué es lo que quieres obtener. Por lo pronto te pongo un ejemplo con datos para ver si queda más claro el uso de los JOIN's y te puede servir.

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tablaA;
  2. +------+-------------+
  3. | id   | descripcion |
  4. +------+-------------+
  5. |    1 | uno         |
  6. |    2 | dos         |
  7. |    3 | tres        |
  8. |    4 | cuatro      |
  9. +------+-------------+
  10. 4 rows in set (0.00 sec)
  11.  
  12. mysql> SELECT * FROM tablaB;
  13. +------+-------------+
  14. | id   | descripcion |
  15. +------+-------------+
  16. |    2 | two         |
  17. |    3 | three       |
  18. |    5 | five        |
  19. +------+-------------+
  20. 3 rows in set (0.00 sec)
  21.  
  22. mysql> SELECT * FROM tablaC;
  23. +------+--------------+
  24. | id   | descripcion  |
  25. +------+--------------+
  26. |    2 | deux         |
  27. |    3 | trois        |
  28. |    4 | quatre       |
  29. +------+--------------+
  30. 3 rows in set (0.00 sec)
  31.  
  32. mysql> SELECT * FROM tablaA
  33.     -> INNER JOIN tablaB ON tablaA.id = tablaB.id
  34.     -> INNER JOIN tablaC ON tablaA.id = tablaC.id;
  35. +------+-------------+------+-------------+------+-------------+
  36. | id   | descripcion | id   | descripcion | id   | descripcion |
  37. +------+-------------+------+-------------+------+-------------+
  38. |    2 | dos         |    2 | two         |    2 | deux        |
  39. |    3 | tres        |    3 | three       |    3 | trois       |
  40. +------+-------------+------+-------------+------+-------------+
  41. 2 rows in set (0.00 sec)

Saludos
Leo.
  #10 (permalink)  
Antiguo 11/07/2012, 14:47
Avatar de trofserpiente  
Fecha de Ingreso: julio-2012
Ubicación: Lerida
Mensajes: 220
Antigüedad: 12 años, 4 meses
Puntos: 1
Exclamación Respuesta: como usar el join con mas de dos tablas

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola trofserpiente:

También tuve la misma sensación cuando leí tus comentarios que lo que comenta gnzsoloyo, pero me da gusto que aclares esa situación.

En tu post dices que:



En qué sentido no te sirvieron los ejemplos? es decir la consulta que trataste de poner marcó algún error?, si es así ¿qué error es el que marcó? Si la consulta no arrojó los resultados esperados, entonces puede ser que los JOIN's no sean la solución, tendrías que comenzar por describirnos cómo son tus tablas, poner algunos datos de ejemplo y decirnos qué es lo que quieres obtener. Por lo pronto te pongo un ejemplo con datos para ver si queda más claro el uso de los JOIN's y te puede servir.

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tablaA;
  2. +------+-------------+
  3. | id   | descripcion |
  4. +------+-------------+
  5. |    1 | uno         |
  6. |    2 | dos         |
  7. |    3 | tres        |
  8. |    4 | cuatro      |
  9. +------+-------------+
  10. 4 rows in set (0.00 sec)
  11.  
  12. mysql> SELECT * FROM tablaB;
  13. +------+-------------+
  14. | id   | descripcion |
  15. +------+-------------+
  16. |    2 | two         |
  17. |    3 | three       |
  18. |    5 | five        |
  19. +------+-------------+
  20. 3 rows in set (0.00 sec)
  21.  
  22. mysql> SELECT * FROM tablaC;
  23. +------+--------------+
  24. | id   | descripcion  |
  25. +------+--------------+
  26. |    2 | deux         |
  27. |    3 | trois        |
  28. |    4 | quatre       |
  29. +------+--------------+
  30. 3 rows in set (0.00 sec)
  31.  
  32. mysql> SELECT * FROM tablaA
  33.     -> INNER JOIN tablaB ON tablaA.id = tablaB.id
  34.     -> INNER JOIN tablaC ON tablaA.id = tablaC.id;
  35. +------+-------------+------+-------------+------+-------------+
  36. | id   | descripcion | id   | descripcion | id   | descripcion |
  37. +------+-------------+------+-------------+------+-------------+
  38. |    2 | dos         |    2 | two         |    2 | deux        |
  39. |    3 | tres        |    3 | three       |    3 | trois       |
  40. +------+-------------+------+-------------+------+-------------+
  41. 2 rows in set (0.00 sec)

Saludos
Leo.

bueno ya comencé a entender un poco pero nada bueno lo que pasa es que tengo 3 tablas

alumnos--l------<notas..............>--------l--materias
id(PK)...................idnotas........................ ......codm(PK)
nombres...............id(FK)................................nombre materias
...........................codm(FK)........................................
............................nota1................. ..........................

estoy utilizando esta consulta

select * from notas
inner join notas on notas.id=alumnos.id
inner join notas on notas.codm=materias.codm
where alumnos.id='1"

pero no me sirve espero que con estoy puedan ayudarme y muchas gracias por toda la ayuda brindada hasta el momento
__________________
Luis Alfonso Cruz Valbuena
[email protected]
  #11 (permalink)  
Antiguo 11/07/2012, 15:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: como usar el join con mas de dos tablas

Bueno, supongo que en realidad la consulta es así:
Código MySQL:
Ver original
  1. FROM alumnos A
  2.     INNER JOIN notas N ON A.id = N.id
  3.     INNER JOIN materias M ON N.codm = M.codm
  4. WHERE A.id=1
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 11/07/2012, 15:35
Avatar de trofserpiente  
Fecha de Ingreso: julio-2012
Ubicación: Lerida
Mensajes: 220
Antigüedad: 12 años, 4 meses
Puntos: 1
Exclamación Respuesta: como usar el join con mas de dos tablas

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Bueno, supongo que en realidad la consulta es así:
Código MySQL:
Ver original
  1. FROM alumnos A
  2.     INNER JOIN notas N ON A.id = N.id
  3.     INNER JOIN materias M ON N.codm = M.codm
  4. WHERE A.id=1
gracias ya vi cuales eran mis errores y supongo que asi se ara para 3,4,5 o mas tablas me nace otra pregunta es obligatorio poner ese alias a cada tabla es la pregunta

le agradezco amigo
__________________
Luis Alfonso Cruz Valbuena
[email protected]
  #13 (permalink)  
Antiguo 11/07/2012, 17:16
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: como usar el join con mas de dos tablas

El alias es opcional, pero facilita la escritura y legibilidad de las consultas cuando los usas. Utilizar los nombres completos de las tablas hace muy engorrosa la lectura, y trae complicaciones cuando usas nombres idénticos en tablas distintas.
Respecto a lo de las diferentes consultas, no te olvides que en este caso sólo estamos viendo el INNER JOIN, que requiere que existan registros coincidentes siempre. Y sólo devuelve los que existan efectivamente en las relaciones indicadas.
Cuando lo que requieres es, por ejemplo, la lista de alumnos que estén inscriptos en una materia, tengan o no notas, esto no aparecerá si usas INNER JOIN. Para esos casos (relaciones opcionales), se usa LEFT JOIN o RIGHT JOIN, pero estos tienen algunas diferencias en el uso respecto del INNER.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 11/07/2012, 18:39
Avatar de trofserpiente  
Fecha de Ingreso: julio-2012
Ubicación: Lerida
Mensajes: 220
Antigüedad: 12 años, 4 meses
Puntos: 1
Exclamación Respuesta: como usar el join con mas de dos tablas

Cita:
Iniciado por gnzsoloyo Ver Mensaje
El alias es opcional, pero facilita la escritura y legibilidad de las consultas cuando los usas. Utilizar los nombres completos de las tablas hace muy engorrosa la lectura, y trae complicaciones cuando usas nombres idénticos en tablas distintas.
Respecto a lo de las diferentes consultas, no te olvides que en este caso sólo estamos viendo el INNER JOIN, que requiere que existan registros coincidentes siempre. Y sólo devuelve los que existan efectivamente en las relaciones indicadas.
Cuando lo que requieres es, por ejemplo, la lista de alumnos que estén inscriptos en una materia, tengan o no notas, esto no aparecerá si usas INNER JOIN. Para esos casos (relaciones opcionales), se usa LEFT JOIN o RIGHT JOIN, pero estos tienen algunas diferencias en el uso respecto del INNER.
gracias hombre y que pena por el mal entendido que bien que existan personas que no le importa regalar el conocimiento
__________________
Luis Alfonso Cruz Valbuena
[email protected]

Etiquetas: join, tabla, tablas, usar
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 13:46.