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

[SOLUCIONADO] Relacionar 3 tablas con inner join

Estas en el tema de Relacionar 3 tablas con inner join en el foro de Mysql en Foros del Web. hola buenas a todos, estoy tratando de relacionar 3 tablas con inner join, pero me es imposible, si son dos tablas va bien, con 3 ...
  #1 (permalink)  
Antiguo 27/05/2013, 11:41
 
Fecha de Ingreso: enero-2010
Mensajes: 56
Antigüedad: 14 años, 3 meses
Puntos: 1
Relacionar 3 tablas con inner join

hola buenas a todos, estoy tratando de relacionar 3 tablas con inner join, pero me es imposible, si son dos tablas va bien, con 3 ya no. la sentencia que uso es la siguiente:

Código MySQL:
Ver original
  1. from pedidos inner join clientes on pedidos.id_cliente=clientes.id_cliente
  2. inner join clientes_sr on pedidos.id_cliente=clientes_sr.id_cliente
  3. where realizado='1'
  4. group by pedidos.id_pedido
  5. order by fecha, hora;
se que alguno me puede decir que mire en google, en google he mirado y remirado y supuestamente con esto deberia de salir. agradeceria mucho una ayudita. Gracias

Última edición por gnzsoloyo; 27/05/2013 a las 12:36 Razón: Codigo de programacion NO PERMITIDO en foros de BBDD.
  #2 (permalink)  
Antiguo 27/05/2013, 12:39
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Relacionar 3 tablas con inner join

Hola fuzzylee:

Vayamos por partes:

1. No mezcles código PHP con código SQL... en este foro cualquier código, de cualquier lenguaje de programación está prohibido.

2. ¿Cuál es tu problema? En tu post no mencionas qué es lo que pasa. La sentencia es sintácticamente correcta, es decir, no hay ningún error visible, por lo que debería de ejecutarse correctamente, sin embargo es posible que el problema sea que no te está arrojando los resultados esperados, pero ¿qué es lo que esperas entonces obtener como salida? Es conveniente que comiences por decirnos cuál es la estructura de tus tablas, que postees algunos datos de ejemplo para cada una de las tablas y que nos digas qué es lo que esperas como salida, así será más fácil tratar de encontrar una solución. Sin esta información estamos simplemente jugando al adivino.

3. Evita hacer un SELECT *, esto es un pésima práctica, lista solamente los campos que te interesan, no importa que sean muchos (o todos) de entrada estarías duplicando los campos que relacionan tus tablas, lo cual es un desperdicio.

4. Estás agrupando por ciertos campos, pero no estás utilizando ninguna función de agrupación (MIN, MAX, COUNT, AVG, etc.) explica cuál es la razón por la que estás haciendo esta agrupación.

5. Cuando alguien te indiqué que le preguntes a SAN GOOGLE por tus dudas, es porque en la mayoría de los casos ahí está la respuesta, no esperes encontrar una respuesta que te sirva sólo para copiar y pegar, eso es imposible, pero si puedes buscar algún ejemplo que sea parecido a lo que necesitas. Si ya lo hiciste entonces postea todo lo que intentaste hacer, así descartamos soluciones que ya probaste y que no sirven.

Saludos
Leo.
  #3 (permalink)  
Antiguo 28/05/2013, 04:48
 
Fecha de Ingreso: enero-2010
Mensajes: 56
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Relacionar 3 tablas con inner join

hola buenas, Leo, ante todo gracias por responder.
No entiendo lo primero que me dices, no puedo poner el trozo de codigo sobre el que quiero resolver la duda?
El fallo que me da es que no aparece ningun resultado, si el inner join lo hago con solo dos tablas, da igual si la primera con la segunda o con la tercera, pero si lo hago con las 3 a la vez no sale nada.

por cierto es obligatorio que los campos que voy a relacionar sean claves primarias?
y por ultimo lo del SELECT * lo he puesto digamos porque estaba harto de probar y lo puse asi para asegurarme de que no habia puesto ningun campo mal, pero normalmente especifico los campos que quiero consultar.
  #4 (permalink)  
Antiguo 28/05/2013, 04:50
 
Fecha de Ingreso: enero-2010
Mensajes: 56
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Relacionar 3 tablas con inner join

por cierto las tablas las tengo puestas como MyISAM, deberia ponerlas como INNODB?
en esto de relacionar tablas estoy un poco pegado :)
  #5 (permalink)  
Antiguo 28/05/2013, 05:38
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, 4 meses
Puntos: 2658
Respuesta: Relacionar 3 tablas con inner join

Cita:
No entiendo lo primero que me dices, no puedo poner el trozo de codigo sobre el que quiero resolver la duda?
No está permitido en los foros de Bases de Datos o sus subforos poner código de programación en ningún lenguaje, ni tratar temas referentes a lenguajes de programación. Son normas de este foro.
Sólo se postea SQL. Únicamente.
Cualquier trozo de código de cualquier lenguaje que sea encontrado en un post será removido sin previo aviso (Políticas de Uso de Foros del Web, deberías leerlas).
En caso de no poder borrar el código porque haría perder elementos fundamentales del problema planteado por el forista, se mueve el post al foro del lenguaje que se esté usando.

Eso es lo que te ha querido explicar Leo.
__________________
¿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 28/05/2013, 07:03
 
Fecha de Ingreso: enero-2010
Mensajes: 56
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Relacionar 3 tablas con inner join

ok entendido, bueno pues agradeceria que aguien pudiese ayudarme con este problema, ya para la proxima no pondre el codigo.
  #7 (permalink)  
Antiguo 28/05/2013, 07: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: 16 años, 4 meses
Puntos: 2658
Respuesta: Relacionar 3 tablas con inner join

Pues mira, la consulta que pones (ordenando un poco), no tiene errores:
Código MySQL:
Ver original
  1. SELECT   *
  2.     FROM pedidos INNER JOIN clientes
  3.             ON pedidos.id_cliente = clientes.id_cliente
  4.          INNER JOIN clientes_sr
  5.             ON pedidos.id_cliente = clientes_sr.id_cliente
  6.    WHERE realizado = '1'
  7. GROUP BY pedidos.id_pedido
  8. ORDER BY fecha, hora;
Si no devuelve datos es porque no existen registros relacionados entre las tres tablas al mismo tiempo. Es decir, no se cumplen las condiciones.
El INNER JOIN es mandatorio. Deben existir si o si registros en las tres tablas, o no devolverá nada.

¿Exactamente qué es lo que quieres obtener?
Descríbelo en pocas palabras.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 28/05/2013, 07:49
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Relacionar 3 tablas con inner join

Hola de nuevo:

Tal como te lo dije en el primer post, lo comenta nuevamente gnzsoloyo, la consulta en realidad no tiene nada de "malo", por lo tanto el problema está en los datos. por eso te pedí también en el primer post:

Cita:
Es conveniente que comiences por decirnos cuál es la estructura de tus tablas, que postees algunos datos de ejemplo para cada una de las tablas y que nos digas qué es lo que esperas como salida, así será más fácil tratar de encontrar una solución. Sin esta información estamos simplemente jugando al adivino
Si la consulta se ejecuta, pero no regresa ningún registro es porque no existen registros que cumplan con las condiciones especificadas...

Con respecto a lo que preguntas:

Cita:
por cierto es obligatorio que los campos que voy a relacionar sean claves primarias?
No, esto no es obligatorio... tu puedes unir dos tablas por cualquier campo, independientemente de que estas sean o no llaves primarias.

Saludos
Leo,
  #9 (permalink)  
Antiguo 29/05/2013, 07:17
 
Fecha de Ingreso: enero-2010
Mensajes: 56
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Relacionar 3 tablas con inner join

aver lo que pretendo hacer es que la tabla pedidos (la cual tiene un campo llamado id_pedido e id_cliente) se relacione con otras dos.
Una de esas dos es la tabla clientes (clientes con registro) y la otra clientes_sr (clientes que han comprado sin registrarse).
Entonces por el ejemplo el id_cliente de estas dos tablas no va a coincidir nunca porque se generan de manera distinta.

Lo que quiero es una consulta que se conecte a las 3 tablas a la vez para que me salgan los pedidos nuevos tanto de los clientes con registro y sin el (ids distintas).
no se si me he explicado
  #10 (permalink)  
Antiguo 29/05/2013, 08:15
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, 4 meses
Puntos: 2658
Respuesta: Relacionar 3 tablas con inner join

Cita:
Una de esas dos es la tabla clientes (clientes con registro) y la otra clientes_sr (clientes que han comprado sin registrarse).
Entonces por el ejemplo el id_cliente de estas dos tablas no va a coincidir nunca porque se generan de manera distinta.
Entonces estás planteando mal la consulta.
No son tres INNER JOIN, sino dos consultas con INNER JOIN encadenadas con UNION.
Algo mas o menos:
Código MySQL:
Ver original
  1. (SELECT   *
  2.    FROM pedidos P1 INNER JOIN clientes C
  3.             ON P1.id_cliente = C.id_cliente
  4.    WHERE realizado = '1'
  5.   GROUP BY P1.id_pedido)
  6.  
  7.  
  8. (SELECT   *
  9.     FROM pedidos P2 INNER JOIN clientes_sr CS
  10.             ON P2.id_cliente = CS.id_cliente
  11.    WHERE realizado = '1'
  12. GROUP BY P2.id_pedido)
  13. ORDER BY fecha, hora;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 30/05/2013, 08:03
 
Fecha de Ingreso: enero-2010
Mensajes: 56
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Relacionar 3 tablas con inner join

ahora el problema lo tengo en el mysql_fetch_array, que dice que no es un argumento valido.
por cierto, cuando dices pedidos P1, P1 para que lo pones.
  #12 (permalink)  
Antiguo 30/05/2013, 08:51
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, 4 meses
Puntos: 2658
Respuesta: Relacionar 3 tablas con inner join

Son alias.
Creo que te está faltando un poco de SQL...

Lo de mysql_fetch_array() es tema de PHP, no de MySQL, pero quiero suponer que no hiciste simplemente un Copy+Paste de lo que te puse, ¿no es así?
Al menos habrás probado primero la consulta en el phpMyadmin...


Eso es lo que hacemos todos los que trabajamos en desarrollo...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 30/05/2013, 08:51
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, 4 meses
Puntos: 2658
Respuesta: Relacionar 3 tablas con inner join

Son alias.
Creo que te está faltando un poco de SQL...

Lo de mysql_fetch_array() es tema de PHP, no de MySQL, pero quiero suponer que no hiciste simplemente un Copy+Paste de lo que te puse, ¿no es así?
Al menos habrás probado primero la consulta en el phpMyadmin...


Eso es lo que hacemos todos los que trabajamos en desarrollo...
__________________
¿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 30/05/2013, 09:29
 
Fecha de Ingreso: enero-2010
Mensajes: 56
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Relacionar 3 tablas con inner join

jejej no hombre, un copy paste no, lo he adaptao y no lo he probado en el myadmin, lo que si he probado es que solo lo que hay antes del UNION o solo lo que hay despues si que funciona, pero con todo junto no.
si ya se que me falta sql, yo voy haciendo las cosas segun me va haciendo falta, no me he estudiado todas las sentencias ni mucho menos :(

por cierto alguno de vosotros administra servidores?
  #15 (permalink)  
Antiguo 30/05/2013, 09:44
 
Fecha de Ingreso: enero-2010
Mensajes: 56
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Relacionar 3 tablas con inner join

por cierto gracias a tu recomendacion de hacerlo sobre el mysql myadmin he logrado dar con lo que fallaba, tu no lo podias saber porque tiene que ver con los campos que tengo en cada tabla. el fallo estaba en como hago la consulta. me mirare cuando tenga tiempo algun tutorial de sql.
muchas gracias por la ayuda

Etiquetas: join, relacionar, select, sql, tabla, tablas
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.
Tema Cerrado

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 09:24.