Subconsultas sql

Hice una subconsulta para que me muestre todos los datos de varias tablas relacionadas esta es mi consulta
select E.IdEquipo,E.Tipo,E.Marca,E.Modelo,E.Proyecto,E.NNI,E.NumeroSerie,E.IP,A.NombreArea,U.NombreUnidad,U.Ubicacion from Equipo E inner Join Area A on A.IdArea=E.IdArea Left join Unidad U on U.IdUnidad=A.idUnidad
equipo tiene la id de de area, area tiene la id de unidad. Quiero hacer esta misma consulta pero con un condicion por ejemplo que muestre todos los equipos cuando nombreunidad es igual a 'UMF63'.
select E.IdEquipo,E.Tipo,E.Marca,E.Modelo,E.Proyecto,E.NNI,E.NumeroSerie,E.IP,A.NombreArea,U.NombreUnidad,U.Ubicacion from Equipo E inner Join Area A on A.IdArea=E.IdArea Left join Unidad U on U.IdUnidad=A.idUnidad WHERE U.NOMBREUNIDAD = 'UMF63'
El problema es que no me muestra ningún equipo que pertenecen a esa unidad aún cuando tengo registrados 5 equipos. Que tengo que agregar a la condición para que muestre la información que quiero.

1 respuesta

Respuesta
1
Por lo que comentas en tu pregunta tienes 3 tablas Equipo, Área y Unidad. Y relacionas esas tablas de forma distinta. Un INNER JOIN para las tablas Equipo y Área, y un LEFT JOIN para relacionar el resultado del cruce anterior con la tabla Unidad (usando el campo idUnidad que lo relaciona con la tabla Área).
Con el primer INNER JOIN desaparecen las entradas de Equipo y Área que no estén relacionadas entre sí por el campo IdArea. Si las entradas de Área que quedan después del primer cruce (INNER JOIN) no contienen la unidad 'UMF63', en el segundo cruce LEFT JOIN no van a aparecer los equipos que tengan esa unidad relacionada en el Área.
Por eso asegúrate de que el primer cruce no elimina las Áreas con esa unidad. Prueba con la siguientes consultas:
-----------------------------------
A.IdArea, A.NombreArea,U.NombreUnidad,U.Ubicacion from Area A Left join Unidad U on U.IdUnidad=A.idUnidad WHERE U.NOMBREUNIDAD = 'UMF63'
-----------------------------------
A.IdArea,A.IdEquipo,E.Tipo,E.Marca,E.Modelo,E.Proyecto,E.NNI,E.NumeroSerie,E.IP,A.NombreArea from Equipo E inner Join Area A on A.IdArea=E.IdArea where E.IdEquipo IN ('<IdEquipo1>','<IdEquipo2>','<IdEquipo3>','<IdEquipo4>','<IdEquipo5>')
-----------------------------------
<IdEquipo1>...<IdEquipo5> son los 5 IdEquipo que dices que deberían aparecer asociados a esa unidad. Si la segunda consulta no te muestra nada deberás revisar a qué se debe. Si aparecen datos, deberás comparar la primera columna A.IdArea para ver si alguna de ellas se encuentra en la columna A.IdArea de la primera consulta. Si no es así, no aparecerán. Prueba entonces a cambiar LEFT JOIN por RIGHT JOIN en la primera consulta y así te saldrán todas las unidades, y observa entonces el campo A.IdArea (si sale a NULL no existen relaciones con esa unidad).
Espero haberte sido de ayuda, si es así te agradecería que puntuaras esta pregunta. Si no consigues resolver el problema, puedes enviarme algunas entradas de las 3 tablas con los equipos que crees que deberían aparecer en ese caso.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas