SQL - ITIG

 
Vista:

ITIG

Publicado por Sergio (2 intervenciones) el 08/05/2008 08:26:49
Hola tengo las siguiente tabla:

emp(cod,nombre,oficina,cargo,comision,ctacorriente,mgr)

es una tabla que guarda los empleados de un a empresa, el campo mgr, corresponde al numero del empelado que es jefe. es decir que es una relacion reflexiva (los jefes de todos los empleados son otros empleados que estan en la misma tabla)

Quiero hacer una consulta que me saque por pantalla:

el codigo, nombre del empleado y nombre del Jefe de dicho empleado.

Que me saque tambien a los empleados que no tienen jefe (por eso he puesto un outer join)

SELECT a.cod AS codigo, a.nombre, a.mgr AS su_Jefe
FROM emp a LEFT OUTER JOIN emp b ON(a.cod!=b.cod)
GROUP BY a.cod,a.nombre,a.mgr;

Si que consigo sacar toda la informacion bien con esta consulta, el problema que tengo es que saco el nº del jefe de cada empleado y en vez del numero lo que quiero sacar es el nombre directamente, alguien sabe como puedo hacerlo?

(debe ser una pequeña modificacion de esa consulta pero que ahora mismo no caigo)

Gracias a todos por adelantado.
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

RE:ITIG

Publicado por Isaias (5072 intervenciones) el 08/05/2008 18:30:08
Sergio

La consulta es RECURSIVA (de recursividad, registros que se apuntan a si mismos), nada que ver con REFLEXIVA, de reflexion o reflexionar.

Como los NOMBRES de los jefes, estan en la misma tabla, debes apuntar a la misma tabla pero con un ALIAS.

SELECT a.cod AS codigo, a.nombre, a.mgr AS su_Jefe, x.nombre
FROM emp a LEFT OUTER JOIN emp b ON(a.cod!=b.cod)
JOIN emp a (SELECT cod, nombre FROM emp) as x ON (a.cod = x.cod)
GROUP BY a.cod,a.nombre,a.mgr, x.nombre;

Dime si te funciona.
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:ITIG

Publicado por Sergio (2 intervenciones) el 09/05/2008 10:12:18
Esa consulta que me has puesto la he probado en un SGBD (en concreto PostgreSQL) y no funciona directamente da error. Pero no sé si iran por ahí los tiros.

SELECT a.cod AS codigo, a.nombre, a.mgr AS su_Jefe
FROM emp a LEFT OUTER JOIN emp b ON(a.mgr!=b.mgr)
GROUP BY a.cod,a.nombre,a.mgr;

Aunque la idea de hacer Un Alias igual si que puede ser la solucion.

El enunciado de la consulta es sacar el codigo, nombre y nombre del jefe

de cada empleado, o sea que me tendran q salir tantas filas como empleados haya en la tabla emp.
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