Ayuda consulta SQL

P

Hola , estoy haciendo unos ejercicios de consultas SQL y resulta que hay una que no se como hacerla , a ver si me podes ayudar.
La consulta dice así :

"Cree una consulta que muestre apellidos de empleado , números de departamento y todos los empleados que trabajan en el mismo departamento dado. Asigne a cada columna la etiqueta adecuada."

Aquí os dejo una imagen de las tablas y de la solución que me dan:

Gracias

m0rG

Una de las mejores formas de atacar consultas que no sabes hacer es ir por partes. En el caso que pones puedes empezar por sacar los empleados por departamento (lo que serían las 2 primeras columnas). Esa es una consulta sencilla que puede escribirse tal que así:

SELECT D.DEPARTMENT_ID AS DEPARTMENT,E.LAST_NAME AS EMPLOYEE
FROM DEPARTMENTS AS D 
INNER JOIN EMPLOYEES AS E ON (D.DEPARTMENT_ID = E.DEPARTMENT_ID)

Ahora lo que falta es sacar los compañeros de cada empleado. Para ello simplemente hay que volver a unir con la tabla de empleados y obtener los registros con el mismo ID de departamento. Además hay que imponer la condición de que el ID del compañero no sea el mismo que el del propio empleado (para que no aparezcan los empleados como compañeros de sí mismos):

SELECT D.DEPARTMENT_ID AS DEPARTMENT,E.LAST_NAME AS EMPLOYEE,C.LAST_NAME AS COLLEAGUE
FROM DEPARTMENTS AS D 
INNER JOIN EMPLOYEES AS E ON (D.DEPARTMENT_ID = E.DEPARTMENT_ID)
INNER JOIN EMPLOYEES AS C ON (E.DEPARTMENT_ID = C.DEPARTMENT_ID)
WHERE E.EMPLOYEE_ID <> C.EMPLOYEE_ID

No lo he probado pero no debería ir muy desencaminado. El INNER JOIN para sacar los compañeros puede ser un LEFT JOIN si se quiere sacar los empleados que no tienen compañeros también (en este caso aparecería un valor NULL en la columna de compañeros).

1 1 respuesta
xuse92

#1 donde estudias? Los de mi clase que recuperan BBDD usan esas mismas tablas :/

#4 vale XD

1 respuesta
P

#2 Muchas gracias , en tu consulta me salia un error en la linea 2 , pero viendo como lo has hecho se me ha encendido la bombilla :D

Y creo que esta es la solucion ( a mi manera )

select d.department_id , e.last_name  , j.last_name
from departments d , employees e , employees j
where d.department_id=e.department_id
and e.department_id=j.department_id
and e.employee_id<>j.employee_id

Gracias

#3 Estudio en zgz , pero estas tablas son las que vienen por defecto en oracle ( segun la version )

Salu2

Usuarios habituales