如何在一个表中查找不在另一个表中的记录

时间:2013-03-29 00:19:48

标签: oracle

我是oracle sql和编程的新手,我需要一些关于我的第一个项目的帮助。我正在使用这个表模式:

Column  Data Type   Length  Precision   Scale   Nullable
EMPLOYEE_ID NUMBER    22      6           0        No
START_DATE  DATE      7        -          -        No
END_DATE    DATE      7        -          -        No
JOB_ID     VARCHAR2   10       -          -        No
DEPARTMENT_ID   NUMBER  22     4          0        Yes

我希望显示所有从未更改过工作的员工,甚至不显示一次(员工未在上表中列出)此表格标记为job_history。我该怎么做呢?我不确定如何开始这个。

3 个答案:

答案 0 :(得分:1)

select * from employees
where employee_id not in ( select employee_id from job_history)
/

答案 1 :(得分:1)

您可以使用左连接并在job_history表上检查null employee_id。

select * from employees 
left join job_history 
on job_history.employee_id = employees.employee_id 
where job_history.employee_id is NULL

答案 2 :(得分:-1)

通常,执行计划更适合

select * from employees e where not exists 
  (select 1 from job_history jh.employee_id = e.employee_id)

而不是“不在()”。 如果表格具有相同的结构,那么最好的结果将是

select * from employees 
minus
select * from job_history