SQL 集合运算符 - 从具有不同列的表中选择行

SQL Set Operators - Selecting rows from tables with different columns

我正在使用 Oracle 10g,我正在尝试使用集合运算符 select 一个 table 中没有出现在另一个 table 查询中的行.

我正在尝试 select idlast_namefirst_nameemployee table,其中这些行没有出现在 job_history table.

这 2 个 table 中唯一的公共列是 id 列。但是我也想显示名字。

我试过:

SELECT 
    id, last_name, first_name 
FROM 
    employees

MINUS

SELECT 
    id, TO_CHAR(null), TO_CHAR(null) 
FROM 
    job_history;

这没有产生预期的结果。

但是,如果我不想显示员工 table 的姓名,我会使用:

SELECT id FROM employees
MINUS
SELECT id FROM job_history;

这给了我一半的结果,除了我想要员工的名字 table。

有什么建议吗?

为什么你不能像

一样使用NOT IN
SELECT id, last_name, first_name FROM employees
WHERE ID NOT IN (SELECT id FROM job_history);

你也可以试试LEFT JOIN喜欢

SELECT e.id, e.last_name, e.first_name 
FROM employees e LEFT JOIN job_history jh
ON e.ID = jh.ID
WHERE jh.some_other_column IS NULL;

您可以对 select 结果使用内部联接

select a.id,   a.last_name, a.first_name
from employees a 
inner join ( 
SELECT id FROM employees
MINUS
SELECT id FROM job_history ) x on x.id = a.id