SQL 集合运算符 - 从具有不同列的表中选择行
SQL Set Operators - Selecting rows from tables with different columns
我正在使用 Oracle 10g,我正在尝试使用集合运算符 select 一个 table 中没有出现在另一个 table 查询中的行.
我正在尝试 select id
、last_name
和 first_name
列 employee
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
我正在使用 Oracle 10g,我正在尝试使用集合运算符 select 一个 table 中没有出现在另一个 table 查询中的行.
我正在尝试 select id
、last_name
和 first_name
列 employee
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