SQL - duda consulta sql

 
Vista:

duda consulta sql

Publicado por pepe (4 intervenciones) el 01/10/2010 22:09:09
CREATE TABLE PROJECTES
( NUM_PROJ INTEGER,
NOM_PROJ CHAR(10),
PRIMARY KEY (NUM_PROJ));

CREATE TABLE EMPLEATS
( NUM_EMPL INTEGER,
NUM_PROJ INTEGER,
PRIMARY KEY (NUM_EMPL),
FOREIGN KEY (NUM_DPT) REFERENCES DEPARTAMENTS (NUM_DPT),
FOREIGN KEY (NUM_PROJ) REFERENCES PROJECTES (NUM_PROJ));

Necesito hacer una consulta para obtener los campos NUM_EMPL y NOM_PROJ (numeros y nombres de los proyectos) que tengan asignados dos o más empleados.

Me llevo peleando un buen rato y no hay manera de conseguirlo... soy nuevo de hace poco en bases de datos...

gracias de antemano!
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

RE:duda consulta sql

Publicado por Leonardo Josué (1173 intervenciones) el 01/10/2010 23:12:05
Buenas tardes Pepe, me hubiera gustado que también hubieras puesto en tu post lo que llevas de tu consulta, pues en realidad no mencionas ningún problema. Te recuerdo que el foro es para resolver dudas. Tampoco mencionas qué manejador de BD estás utilizando, pero espero que no tengas problemas con la sintaxis que voy a poner.

Lo que quieres hacer se hace en dos partes, primero tendrías que obtener todos los proyectos que tienen asignados a dos o más empleados. Esto sería así:

SELECT E.num_proj, P.nom_proj
FROM EMPLEATS E INNER JOIN PROJECTES P ON E.num_proj = P.num_proj
GROUP BY E.num_proj, P.nom_proj
HAVING COUNT(*) >= 2

puedes observar que hago el INNER JOIN para saber cual es el nombre del proyecto. Una vez con que tengo esto hay que hacer una búsqueda sobre la tabla @EMPLEATS para filtrar sólo aquellos elementos que obtuviste en la consulta previa. Quedaría algo como esto:

SELECT T1.num_empl, T2.nom_proj FROM EMPLEATS T1 INNER JOIN
(
SELECT E.num_proj, P.nom_proj
FROM EMPLEATS E INNER JOIN PROJECTES P ON E.num_proj = P.num_proj
GROUP BY E.num_proj, P.nom_proj
HAVING COUNT(*) >= 2
) T2
ON T1.num_proj = T2.num_proj
ORDER BY T2.nom_proj, T1.num_empl

Saludos y espero que te sirva el ejemplo.
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

RE:duda consulta sql

Publicado por pepe (4 intervenciones) el 01/10/2010 23:28:47
Muchas gracias Leo!

Siento no haber puesto mis sentencias antes :S

La verdad es que me ha ayudado un montón, la verdad es que tu respuesta iba más allá de lo que en teoría he de saber en estos momentos (en esta etapa del curso aún no nos dejan usar inners joins ni ON pero va bien ir indagando más ^^

He podido transformar tus referencias hacia algo más sencillo y de mi nivel, que me da el mismo resultado, ahora te lo adjunto:

SELECT E.NUM_PROJ, P.NOM_PROJ
FROM EMPLEATS E, PROJECTES P
WHERE E.NUM_PROJ = P.NUM_PROJ
GROUP BY E.NUM_PROJ, P.NOM_PROJ
HAVING COUNT(*) >= 2

yo antes no metía la sentencia del where y por allí petaba, me saltaba el paso de comparar que esté tratando el mismo proyecto del mismo empleado en las dos tablas.. :P

Pues nada, ya se un poco más!

pepe
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