SQL - Resolver consulta sql (ayuda)

 
Vista:

Resolver consulta sql (ayuda)

Publicado por martin_vb (2 intervenciones) el 27/07/2011 17:46:18
Buenas!!! Necesito resolver una consulta donde se pide el número de Empleado, el nombre del Empleado y el nombre del proyecto de aquellos empleados que compartan el proyecto del Empleado número 1. En la consulta final no se deben traer ningún dato del empleado número uno.

Las tablas tienen estos campos

Empleado campos: Número_de_empleado, Nombre_del_empleado

Trabaja_en campos: Número_del_Empleado, Sector, Codigo_Proyecto

Proyecto campos: Codigo_Proyecto, Descripción


Se me ocurrió hacer una consulta inner join que relacione los campos que tienen relación pero no se que poner en la condición "where".


Saludos!!!
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

Resolver consulta sql (ayuda)

Publicado por leonardo_josue (1173 intervenciones) el 27/07/2011 20:20:47
hola martin_vb:

Esto parece tarea de escuela, así es que si bien no pienso colocarte la respuesta final si espero poder ayudarte a obtenerla por tu propia cuenta. veo varias posibles soluciones, así es que te propongo una con la intención de que puedas pensar en alguna otra:

El primer paso (y creo que es donde tienes problemas) sería determinar en qué proyecto trabaja el Empleado numero 1. Aunque no pones datos de ejemplo, a partir de la información que das de tus tablas creo que sería algo más o menos así:

1
2
SELECT codigo_proyecto FROM Trabaja_En T
INNER JOIN Empleado E on T.numero_de_empleado = E.numero_de_empleado


Ahora bien, no se si la relación entre sus tablas es 1 a 1 o uno a muchos, de cualquier manera esta consulta te regresaría el o los proyectos en los que participa el empleado 1.

Ahora, utilizarías este resultado para filtrar la información, puedes hacerlo agregando un INNER JOIN a tus tablas, algo como esto:

1
2
3
4
5
SELECT campos que quieres listar FROM Empleados
INNER JOIN TrabajaEn..............................
INNER JOIN Proyecto .................................
INNER JOIN ( Subconsulta Anterior)
on Proyecto.codigo_proyecto = subconsulta.codigo_proyecto


O también podrías utilizar la subconsulta en el WHERE y usar IN o EXISTS para hacer el filtrado:
1
2
3
4
5
WHERE
Proyecto.codigo_proyecto IN (subconsulta........)
 
WHERE
EXISTS (Subconsulta + la condición para comparar los proyectos)


Como vez son muchas las opciones que tienes para resolver tu consulta, intenta hacerla y si continuas con problemas postea algo de lo que haz intentado hacer para ayudarte a afinarla y si es posible pon algunos datos de ejemplo para hacer pruebas.

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
0
Comentar

Resolver consulta sql (ayuda)

Publicado por martin_vb (2 intervenciones) el 28/07/2011 05:59:46
Hola leo!

Jaja, tarea de escuela no es, fué un exámen que me tomaron para una postulación de trabajo y desarrollé este punto pero me quedé en el final donde no supe definir la condición WHERE...

Datos el ejercicio no tenía ninguno. Solamente las tablas y los nombres de los campos que puse donde se relacionan la tabla EMPLEADO con la tabla TRABAJA_EN y esta última tabla con la tabla PROYECTO.

Lo que se me ocurrió fué hacer esta consulta:

Select Número_de_empleado, Nombre_del_empleado, Descripción
from Empleado as E
INNER JOIN
Trabaja_en as T
ON E.Numero_de_empleado = T.Numero_de_empleado
INNER JOIN
Proyecto as P
ON T.Codigo_proyecto = P.Codigo_proyecto
(hasta acá me traeria todos los datos que se relacionan entres las tres tablas)
WHERE (???)

Saludos!!!
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
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Resolver consulta sql (ayuda)

Publicado por leonardo_josue (1173 intervenciones) el 28/07/2011 17:50:50
Jajaja... perdón, pero tal parecía trabajo de escuela (aunque no estaba tan errado, era pregunta de exámen jejeje). Me da gusto ver que no te quedaste con la duda al presentarse un problema que no pudiste resolver, independientemente del resultado del examen eso demuestra tus ganas de superarte, lo que seguramente te permitirá lograr la promoción pero si no fuera así estoy seguro que en un futuro cercano la obtendrás

Supongamos que tenemos los siguientes datos en tus tablas:

1
2
3
4
5
6
7
8
EMPLEADOS
numero_de_empleado  nombre_del_empleado
------------------  -------------------
                 1  uno
                 2  dos
                 3  tres
                 4  cuatro
                 5  cinco


1
2
3
4
5
PROYECTOS
codigo_proyecto  descripcion
---------------  -----------
              1  Proyecto A
              2  Proyecto B


1
2
3
4
5
6
7
8
TRABAJA_EN
numero_de_empleado  codigo_proyecto
------------------  ---------------
                 1                1
                 2                2
                 3                1
                 4                1
                 5                2


De aquí se desprende que los empleados 1, 3 y 4 trabajan en el proyecto A, mientras que los empleados 2 y 5 trabajan en el proyecto B. Ahora bien, yendo por partes, para obtener en qué proyecto trabaja el empleado 1 tendrías que hacer algo como esto (es prácticamente la misma subconsulta que puse en el post anterior, pero olvidé poner la condición where y no hace falta el INNER JOIN)

1
2
SELECT codigo_proyecto FROM Trabaja_En T
WHERE T.numero_de_empleado = 1


el resultado de la consulta sería

1
2
3
codigo_proyecto
---------------
              1


que es el código del proyecto en el que trabaja el empleado 1. La consulta que ponías estaba casi completa, sólo habría que incluir esta subconsulta como un inner join extra o en el where junto con una sentencia IN:

quedaría más o menos así:

Utilizando INNER JOIN
1
2
3
4
5
6
7
8
9
10
SELECT E.numero_de_empleado, E.nombre_del_empleado, P.descripcion
FROM Trabaja_En T
INNER JOIN Empleados E ON T.numero_de_empleado = E.numero_de_empleado
INNER JOIN Proyectos P ON T.codigo_proyecto = P.codigo_proyecto
INNER JOIN
(
SELECT codigo_proyecto FROM Trabaja_En T
WHERE T.numero_de_empleado = 1
) X ON P.codigo_proyecto = X.codigo_proyecto
WHERE e.numero_de_empleado != 1


Utilizando WHERE-IN

1
2
3
4
5
6
7
8
9
SELECT E.numero_de_empleado, E.nombre_del_empleado, P.descripcion
FROM Trabaja_En T
INNER JOIN Empleados E ON T.numero_de_empleado = E.numero_de_empleado
INNER JOIN Proyectos P ON T.codigo_proyecto = P.codigo_proyecto
WHERE
P.codigo_proyecto IN
(SELECT codigo_proyecto FROM Trabaja_En T
WHERE T.numero_de_empleado = 1) AND
e.numero_de_empleado != 1


ambas consultas arrojarían exactamente el mismo resultado:

1
2
3
4
numero_de_empleado  nombre_del_empleado  descripcion
------------------  -------------------  -----------
                 3  tres                 Proyecto A
                 4  cuatro               Proyecto A


Observa que en ambas consultas existe la condición e.numero_de_empleado != 1, esto es para no mostrar ningún dato del empleado 1.

Espero sinceramente que esto te ayude a comprender el problema y cualquier cosa lo 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
0
Comentar

Resolver consulta sql (ayuda)

Publicado por Jorge Montenegro (2 intervenciones) el 18/06/2018 09:18:43
Buenas noches amigo leonardo_josue soy una persona que lo admira mucho su forma de programar y trato de aprender y aplicar mis propios métodos con respecto a este ejercicio tengo una solución me comenta si desea que tal le parece


SELECT C.nombreempleado, C.numeroempleado
FROM @empleados AS C
WHERE not EXISTS
(SELECT *
FROM @trabajaen AS O inner join @proyectos v on O.codigoproyecto = v.codigoproyecto
WHERE O.numeroempleado = C.numeroempleado
AND O.numeroempleado = 1 )
AND EXISTS
(SELECT *
FROM @trabajaen AS O
WHERE O.numeroempleado = C.numeroempleado
AND O.codigoproyecto = 1)

lo único que el campo descripción de la tabla proyectos no lo puedo sacar del join interno un saludo
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