부서 이동 경험이 있는 사원들의 정보와 현재 부서를 조회하세요.
SELECT
e.emp_no,
CONCAT(e.first_name, ' ', e.last_name) AS name,
e.hire_date,
d.dept_name,
de.to_date
FROM
dept_emp AS de
JOIN
departments AS d ON d.dept_no = de.dept_no
JOIN
employees AS e ON de.emp_no = e.emp_no
WHERE
to_date = '9999-01-01'
AND
e.emp_no IN (
SELECT
e.emp_no
FROM
dept_emp AS d
JOIN
employees AS e ON d.emp_no = e.emp_no
JOIN
departments AS d2 ON d.dept_no = d2.dept_no
GROUP BY
d.emp_no, e.first_name, e.last_name, e.hire_date
HAVING
COUNT(d.emp_no) > 1);
WITH emp_data AS (
SELECT
emp_no
FROM
dept_emp
GROUP BY
emp_no
HAVING
COUNT(emp_no) > 1
),
CurrentDepartments AS (
SELECT
d.emp_no,
d.dept_no,
d2.dept_name
FROM
dept_emp AS d
JOIN
departments AS d2 ON d.dept_no = d2.dept_no
WHERE
d.to_date = '9999-01-01' -- 현재 부서만 선택
)
SELECT
e.emp_no,
CONCAT(e.first_name, ' ', e.last_name) AS name,
e.hire_date,
cd.dept_name AS current_dept
FROM
employees AS e
JOIN
emp_data AS edm ON e.emp_no = edm.emp_no
JOIN
CurrentDepartments AS cd ON e.emp_no = cd.emp_no;
💡 IN 여러 값을 or 관계로 묶어 나열하는 조건을 WHERE 절에 사용할 수 있는 키워드
조건의 범위를 지정할 경우 사용하며 위의 경우 서브쿼리의 결과값들을 조건으로 사용
부서 이동 경험이 있는 사원의 정보까지는 출력했으나 부서명을 출력하기 위해 department 테이블과 조인하여 출력하면 다른 부서임에도 불구하고 모든 데이터가 customer service 부서로 출력되는 오류가 있었습니다.
LEFT OUTER JOIN으로 바꾸니까 데이터가 정상출력 되었는데, 이후로는 그냥 JOIN을 해도 정상출력되는 상황이 생겼습니다... 왜 해결이 된 것인지 아시는 분이 계시다면 코멘트 부탁드립니다.
'데이터베이스 > Today's Query' 카테고리의 다른 글
[Today's Query] 부서 매니저였던 사원들의 현재 직급을 출력(2025/01/10) (0) | 2025.01.10 |
---|---|
[Today's Query] 부서별 연봉 3위까지 사원의 이름과 연봉 조회 (2025/01/08) (0) | 2025.01.08 |
[Today's Query] 부서 평균 연봉보다 연봉이 높은 사원을 조회 (2025/01/06) (0) | 2025.01.06 |
[Today's Query] 재직 중인 개발부서 사원의 최신 연봉 정보를 출력 (2025/01/04) (0) | 2025.01.06 |
[Today's Query] 1998년도 연봉 상위 10% 사원의 정보 조회(2025/01/03) (0) | 2025.01.06 |