SQL - Ayudar con un inner join varias tablas

 
Vista:
sin imagen de perfil

Ayudar con un inner join varias tablas

Publicado por Jhon (2 intervenciones) el 20/12/2017 17:33:45
Buen dia !
Necesito ayuda para hacer una consulta de varias tablas, el problema es que el inner join que quiero hacer, las tablas consultadas traen el id (llave primaria) de otras tablas. Tengo las siguientes tablas:

MAQUINAS:
id_maquina
nombre
codigo

SERVICIOS:
id_servicio
id_maquina
codigo
numero_servicio
descripcion

TIPO_MANTENIMIENTO:
id_tipo_mantenimiento
tipo_mantenimiento

INFORME MANTENIMIENTO:
id_informe_mantenimiento
id_mantenimiento
fecha
hora_inicio
hora_fin
descripcion
id_usuario

MANTENIMIENTOS:
id_mantenimiento
id_tipo_mantenimiento
id_maquina
id_ servicio
unidad
fecha
estado


A la tabla que le estoy haciendo la consulta es a MANTENIMIENTOS, el código con el cual estoy haciendo la consulta es:

SELECT mantenimientos.id_mantenimiento, maquinas.nombre, tipo_mantenimiento.tipo_mantenimiento, servicios.codigo
FROM (((mantenimientos
INNER JOIN maquinas ON mantenimientos.id_maquina = maquinas.id_maquina)
INNER JOIN tipo_mantenimiento ON mantenimientos.id_tipo_mantenimiento = tipo_mantenimiento.id_tipo_mantenimiento)
INNER JOIN servicios ON mantenimientos.id_servicio = servicios.id_servicio);

al hacer esta misma consulta en la tabla INFORME MANTENIMIENTO solo me retorna los id's, lo que yo quisiera hacer (no se como explicarlo bien) es como un inner join dentro de un inner join, para poder que me retorne los datos de las otras tablas, quisiera obtener los siguientes datos haciendo la consulta a la tabla INFORME MANTENIMIENTO:

nombre de la maquina, el tipo de mantenimiento, el servicio de la maquina. O sea, consultar los datos de las otras tablas que tiene la tabla MANTENIMIENTOS. Es posible hacer eso?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Ayudar con un inner join varias tablas

Publicado por leonardo_josue (1173 intervenciones) el 20/12/2017 18:44:56
Hola Jhon:

Para empezar, deberías de comentarnos con qué motor de BD's estás trabajando, ya que cada uno de ellos maneja una sintaxis distinta.

Ahora, con respecto a tu pregunta, en realidad puedes hacer los JOIN's que quieras (ya sean LEFT, RIGTH o INNER) y en la mayoría de los casos, el uso de paréntesis no es necesario, así, podrías hacer algo así:


1
2
3
4
5
6
7
8
SELECT
*
FROM
  mantenimientos
INNER JOIN informe_mantenimiento ON informe_mantenimiento.id_mantenimiento   = mantenimientos.id_mantenimiento
INNER JOIN maquinas              ON maquinas.id_maquina                      = mantenimientos.id_maquina
INNER JOIN tipo_mantenimiento    ON tipo_mantenimiento.id_tipo_mantenimiento = mantenimientos.id_tipo_mantenimiento
INNER JOIN servicios             ON servicios.id_servicio                    = mantenimientos.id_servicio

Al poner asterisco traes todos los campos de todas las tablas que estás uniendo, esto no es recomendable, así que sólo debes listar los campos que realmente necesitas.

si esto no te sirve, entonces postea algunos datos de ejemplo y a partir de esos datos dinos qué es lo que esperas obtener como salida, así podremos indicarte alguna otra manera para hacer la consulta.

Haz la prueba y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

Ayudar con un inner join varias tablas

Publicado por Jhon (1 intervención) el 20/12/2017 20:45:32
Hola Leo, primero que todo gracias por contestar.

Estoy trabajando con phpMyAdmin.
Esta es mi base de datos.
Captura-de-pantalla_2017-12-20_10-50-37


Al hacer esta consulta en la tabla MANTENIMIENTOS:

SELECT mantenimientos.id_mantenimiento, maquinas.nombre, tipo_mantenimiento.tipo_mantenimiento, servicios.codigo
FROM mantenimientos
INNER JOIN maquinas ON mantenimientos.id_maquina = maquinas.id_maquina
INNER JOIN tipo_mantenimiento ON mantenimientos.id_tipo_mantenimiento = tipo_mantenimiento.id_tipo_mantenimiento
INNER JOIN servicios ON mantenimientos.id_servicio = servicios.id_servicio

El resultado que obtengo es este:
2


Como puedes ver las tablas están relacionadas, quiero que cuando consulte la tabla INFORME_MANTENIMIENTO, no me arroje el id del mantenimiento, sino llamar todos los valores que contiene la tabla mantenimientos. Por ejemplo, consulto la tabla informe_mantenimiento y hago el inner join con la tabla mantenimientos y puedo obtener el id del servicio, id de la maquina; pero lo que quiero no es obtener el id de la maquina, sino poder incluir la tabla maquinas para obtener tambien el nombre de la maquina y así con los demás datos. Es posible hacer esto?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar