Comunidad de diseño web y desarrollo en internet online

Inner join y al leer datos realice otro query

Citar            
MensajeEscrito el 06 Oct 2016 08:03 pm
Buenas tardes,

Estoy realizan una consulta algo así:

------tabla1-----|-------tabla2------|------tabla3------*
*ID -------------- |--------*car-------|------* Cod_Mat
nom------------- |----Cod_Mat1----|------ Nombre_Mat
car --------------|-----Cod_Mat2---|

"SELECT uno.ID, uno.car, dos.car, dos.Cod_Mat1, dos.Cod_Mat2, tres.Cod_Mat, tres.Nombre_Mat
FROM tabla1 as uno
INNER JOIN tabla2 as dos ON uno.car = dos.car
INNER JOIN tabla3 as tres ON dos.Cod_Mat1 = tres.Cod_Mat
WHERE uno.ID='X'"

Como se pueden dar cuenta la tabla2 se conecta a la tabla3 por medio de COD_Mat1 = Cod_Mat para traer su respectivo nombre ... pero tambien necesito que Cod_Mat2 consulte su nombre igual como lo hace Cod_Mat1...

Me podrian decir como puedo hacer, para que al tener los campos Cod_Mat1 y Cod_Mat2 ellos se busquen en la tabla 3 y traer sus respctivos nombres.... No se como manejar el inner join en este caso... Muchas Gracias

Por Nilrac

1 de clabLevel



 

chrome
Citar            
MensajeEscrito el 07 Oct 2016 01:07 pm
Hola!!
Probá agregando un inner join más, de esta forma:

Código MySQL :

"SELECT uno.ID, uno.car, dos.car, dos.Cod_Mat1, dos.Cod_Mat2, tres.Cod_Mat, tres.Nombre_Mat
FROM tabla1 as uno
INNER JOIN tabla2 as dos ON uno.car = dos.car
INNER JOIN tabla3 as tres ON dos.Cod_Mat1 = tres.Cod_Mat
INNER JOIN tabla3 as tres ON dos.Cod_Mat2 = tres.Cod_Mat
WHERE uno.ID='X'"


Espero te sirva

Saludos


eXe

Por exekiel21

Claber

164 de clabLevel



Genero:Masculino  

programador

chrome
Citar            
MensajeEscrito el 07 Oct 2016 02:57 pm
Una cosa más:
Me di cuenta que el diseño de las tablas no está normalizado.
Hay dos casos, depende cual sea el tuyo es la solución.

Si estás haciendo algo así:
Tenés alumnos y querés formar grupos de 2, y que un alumno solo puede pertenecer a un grupo, entonces tenés la tabla alumnos con id_alumno y nombre, y por otro lado, la tabla grupos con id_grupo, id_alumno1, id_alumno2.

En vez de eso, la solución sería:
la tabla grupos:
id_grupo, nombre

y la tabla alumnos así:
id_alumno,nombre,id_grupo


En otro caso sería:
Si tenés alumnos y querés formar grupos de 2, y que un alumno puede pertenecer a más de un grupo.

Independientemente de la cantidad de alumnos por grupo, la solución es crear una tabla intermedia, quedando las tablas así:

alumnos: id_alumno,nombre
grupos: id_grupo, nombre
alumnos_grupos: id_grupo, id_alumno


Para entender bien esto, te recomiendo que leas sobre relaciones entre tablas, que pueden ser: uno a uno, uno a muchos, o muchos a muchos.



eXe

Por exekiel21

Claber

164 de clabLevel



Genero:Masculino  

programador

chrome
Citar            
MensajeEscrito el 07 Oct 2016 10:48 pm
Muchas Gracias exekiel21 !

Una cosa mas, siguiendo la estructura que formulé al inicio... Si en tabla2 hay desde Cod_Mat1 hasta Cod_Mat50 como hago para conectar cada uno a la tabla3 sin tantos inner join ?

Gracias !

Por Nilrac

1 de clabLevel



 

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.