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

[SOLUCIONADO] inner join con 3 tablas

Estas en el tema de inner join con 3 tablas en el foro de Mysql en Foros del Web. Hola a todos pues tengo un problema al tratar de unir unas tablas ya he buscado en google y no doy con mi solucion y ...
  #1 (permalink)  
Antiguo 18/11/2013, 20:04
Avatar de luisroronoa  
Fecha de Ingreso: noviembre-2012
Ubicación: Argentina
Mensajes: 31
Antigüedad: 11 años, 5 meses
Puntos: 0
Pregunta inner join con 3 tablas

Hola a todos pues tengo un problema al tratar de unir unas tablas ya he buscado en google y no doy con mi solucion y no entiendo lo que quiero es obtener los campos de unas tablas en una consulta es con Mysql aqui las capturas de mi base
Primera tabla con el nombre de maestro les pongo la imagen

bueno la segunda tabla que tengo es alumno

esta a su vez las uni mediante la relacion muchos a muchos y me creo una nueva tabla donde yo escogo que alumno tiene el maestro y aqui uno los id de las dos tablas

he revisado el inner join y me he dado cuenta que para unir dos tablas seleccionas el campo y cuales son las que quieres y bueno yo necesito unir estas tres tengo la idea de que podria ser asi aunque se que esta mal y necesito que me ayuden a corregir la sintaxis bueno lo que quiero obtener es el nombre del maestro,nombre del alumno y la matricula del alumno solo esos 3 campos de 3 tablas diferentes aunque me trabe en lo de alumno_has_maestro esto necesito hacerlo mediante la matricula es decir cuando el usuario me ingrese que quiere buscar por ejemplo si pongo que ingreso la matricula 110075 y que me mande tu nombre de alumno es luis y tu maestro es pedro ok comenze haciendo
Código MySQL:
Ver original
  1. FROM maestro, alumno, alumno_has_maestro
  2. WHERE alumno_idalumnos = maestro_idmaestro
  3. LIMIT 0 , 30
que me dio como resultado
bueno hasta ahi todo va bien o eso es lo que creo y bueno ya no supe como seguir espero que me puedan ayudar se que el select * from no se deberia de hacer pero es como para que me de una idea de como quedaria


bueno lo siguiente que intente hacer fue
Código MySQL:
Ver original
  1. SELECT alumno.nombre, alumno.matricula, maestro.nombre
  2. FROM maestro, alumno
  3. WHERE alumno.idalumnos = maestro.idmaestro
y me salio
nombre luis
matricula 110075
nombre pedro



que es justo lo que quiero pero como es que relaciono la tabla alumno_has_maestro o esos id que puse como me pueden servir para el where
Código MySQL:
Ver original
  1. select alumno.nombre,alumno.matricula,maestro.nombre from maestro,alumno where alumno.idalumnos= maestro.idmaestro where alumno.matricula=110075;
la ultima consulta me manda error la de where revise el manual de mysql y dice que se pone where matricula='110075'; lo intente y pues no me salio porque creo que eso de las comillas se pone cuando es letra lo que se busca y en mi caso es un numero y pues la cambie a
Código MySQL:
Ver original
  1. select alumno.nombre,alumno.matricula,maestro.nombre from maestro,alumno where alumno.idalumnos= maestro.idmaestro where matricula=110075;
y el error que me sale es #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where matricula=110075 LIMIT 0, 30' at line 1 aunque se que me consulta no esta bien hecha o no entiendo bien como es que debe de funcionar en el where ._.

LOL bueno no me di cuenta del otro where que tenia arriba y la solucion que le he dado es
Código MySQL:
Ver original
  1. SELECT alumno.nombre, alumno.matricula, maestro.nombre
  2. FROM maestro, alumno
  3. WHERE alumno.idalumnos = maestro.idmaestro
  4. AND alumno.matricula =110075
  5. LIMIT 0 , 30
No se si esto resulte viable espero sus aportaciones sobre cual es la manera mas correcta en la que debo hacer esta union o que es lo que tengo mal gracias estare leyendo el tema


Bueno al intentar insertar datos resulta que si inserto otro maestro id = 3 y otro alumno con id=2 y luego los uno en la tabla alumno_has_maestro y pongo la consulta me devuelve un valor vacio ya que el 3 y el 2 no son iguales y como tal la consulta no los muestra no se porque la sentencia que puse es
Código MySQL:
Ver original
  1. SELECT alumno.nombre, alumno.matricula, maestro.nombre
  2. FROM maestro, alumno
  3. WHERE alumno.idalumnos = maestro.idmaestro
  4. AND alumno.matricula =98765
  5. LIMIT 0 , 30
y me doy cuenta que el 3 y el 2 al ser valores diferentes no los puede asociar entonces mi consulta anterior se fue a la basura u.u necesito ayuda me estoy ahogando en un vaso con agua

Última edición por luisroronoa; 18/11/2013 a las 22:02
  #2 (permalink)  
Antiguo 19/11/2013, 03:00
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: inner join con 3 tablas

Para que te funcione esa sintaxis los campos de relacion deben tener el mismo nombre.

Usa la sintaxis JOIN...ON

Código MySQL:
Ver original
  1. FROM maestro m
  2.         INNER JOIN alumno_has_maestro ahm
  3.               ON m.idmaestro=ahm.maestro_idmaestro
  4.         INNER JOIN alumno a
  5.               ON a.idalumnos=ahm.alumnos_idalumnos
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 19/11/2013, 18:51
Avatar de luisroronoa  
Fecha de Ingreso: noviembre-2012
Ubicación: Argentina
Mensajes: 31
Antigüedad: 11 años, 5 meses
Puntos: 0
Sonrisa Respuesta: inner join con 3 tablas

listo acomode los campos y utilize la consulta que me escribiste
Código MySQL:
Ver original
  1. FROM maestro m
  2. INNER JOIN alumno_has_maestro ahm ON m.idmaestro = ahm.idmaestro
  3. INNER JOIN alumno a ON a.idalumnos = ahm.idalumnos
  4. LIMIT 0 , 30
y aqui me manda estos resultados

y para que me saliera lo que yo quiero lo puse con un where
y aqui dejo la consulta
Código MySQL:
Ver original
  1. FROM maestro m
  2.         INNER JOIN alumno_has_maestro ahm
  3.               ON m.idmaestro=ahm.idmaestro
  4.         INNER JOIN alumno a
  5.               ON a.idalumnos=ahm.idalumnos where a.matricula=110075;

y me mando esos resultados y me salio gracias por su tiempo

Etiquetas: maestro
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 03:20.