Sql 获取仅在两个表之一中的值
我想获取两个表之一中不可用的记录。假设我有一张桌子,上面有:Sql 获取仅在两个表之一中的值,sql,oracle,Sql,Oracle,我想获取两个表之一中不可用的记录。假设我有一张桌子,上面有: 100 120 140 和表B,其中: 100 110 130 我想获取出现在两个表中但不同时出现在两个表中的值: 120 140 110 130 我可以想出三种方法,可能还有其他方法。我认为这与您尝试的最接近,将您运行的两个单独的查询结合起来: select num from a minus select num from b union all ( select num from b minus select num
100
120
140
和表B,其中:
100
110
130
我想获取出现在两个表中但不同时出现在两个表中的值:
120
140
110
130
我可以想出三种方法,可能还有其他方法。我认为这与您尝试的最接近,将您运行的两个单独的查询结合起来:
select num from a
minus select num from b
union all
(
select num from b
minus select num from a
);
或者只在每张桌子上敲一次::
select num
from(
select num from a
union all
select num from b
)
group by num
having count(*) < 2;
这三种方法都会对数据产生相同的结果。演示如何使用CTEs提供您的值:
with a (num) as (
select 100 from dual
union all select 120 from dual
union all select 140 from dual
),
b (num) as (
select 100 from dual
union all select 110 from dual
union all select 130 from dual
)
select coalesce(a_num, b_num) as num
from (
select a.num a_num, b.num b_num
from a
full outer join b on b.num = a.num
)
where a_num is null or b_num is null;
NUM
----------
110
130
140
120
我在Oracle文档中尝试了两个seprate查询,如表a中的select id减去表b中的select id减去表a中的select id,表b中的select id减去表a中的select id:“编写一个执行外部联接并返回a和b中所有行的查询,如果它们不满足联接条件(完全外部联接),则扩展为NULL。”,使用FROM子句中的完整[OUTER]联接语法。“我只想要任何一个表中都不存在的记录。
with a (num) as (
select 100 from dual
union all select 120 from dual
union all select 140 from dual
),
b (num) as (
select 100 from dual
union all select 110 from dual
union all select 130 from dual
)
select coalesce(a_num, b_num) as num
from (
select a.num a_num, b.num b_num
from a
full outer join b on b.num = a.num
)
where a_num is null or b_num is null;
NUM
----------
110
130
140
120