[ Foro de SQL (y MySQL) ]

quiero hacer una consulta con un inner join a una tabla que solo tiene id's de otras tablas

20-Dec-2017 17:56
Invitado (Ayuda con una consulta en sql)
1 Respuestas

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?


26-Dec-2017 10:44
Nacho Cabanes (+84)

Preferiría una explicación "en lenguaje natural", en vez de en SQL, porque sin ver un diagrama entidad-relación, sólo a partir de los nombres de los campos, puede ser complicado entender lo que buscas. Es decir, en vez de pensar en los JOIN, piensa en la información que quieres obtener...

Hablas de "todos los datos de otras tablas que tiene MANTENIMIENTOS". Para enlazar varias tablas distintas, a mí me parece mucho más natural usar un WHERE que las enlace, en lugar de un INNER JOIN, que se comporta igual pero suele resultar menos legible. La estrucura podría ser tan sencilla como


SELECT *
FROM MANTENIMIENTOS, MAQUINAS, SERVICIOS, TIPO_MANTENIMIENTO
WHERE MAQUINAS.id_maquina = MANTENIMIENTOS.id_maquina
AND SERVICIOS.id_servicio = MANTENIMIENTOS.id_servicio 
AND TIPO_MANTENIMIENTO.id_tipo_mantenimiento = MANTENIMIENTOS.id_tipo_mantenimient;


 






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)