Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 获取仅在两个表之一中的值_Sql_Oracle - Fatal编程技术网

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