我有两张桌子 - table1
和table2
。
两个表都有相同的列。
我想提取记录差异 - 意味着提取table1
中的记录不在table2
中,并在table2
中提取记录而不是table1
。
如何在Oracle Sys中使用SQL来实现这一目标?
答案 0 :(得分:3)
要获得一个结果集中两个表格的所有差异,您可以使用
select columnlist
from tableA
minus
select columnlist
from tableB
union all
select columnlist
from tableB
minus
select columnlist
from tableA
答案 1 :(得分:0)
MINUS获取一个SELECT语句的结果集,然后删除 那些也由第二个SELECT语句返回的行。
此查询将返回table1中的所有行,但不会返回table2中的所有行:
SELECT * FROM table1
MINUS
SELECT * FROM table2;
答案 2 :(得分:0)
select * from table1 where pk_col not in(select pk_col from table2)
select * from table2 where pk_col not in(select pk_col from table1)
答案 3 :(得分:0)
select t1.column1,t1.column2 from table1 t1 except select t2.column1,t2.column2 from table 2 t2 UNION all select t2.column1,t2.column2 from table 2 t2 except select t1.column1,t1.column2 from table1 t1
答案 4 :(得分:0)
select t1.Id,t1.name,t2.Id,t2.name from table1 t1 ,table2 t2 where t1.Id and t1.Name not in(select * from table2) and t2.Id,t2.name not in (select * from table 2)
答案 5 :(得分:0)
RomanKonz的解决方案,附加信息表中实际包含行(我通常使用WITH来简化实际的UNION ALL / MINUS部分):
with
v_a as (
select *
from tableA),
v_b as (
select *
from tableB)
select * from
(
(select 'A only' src, v.* from v_a v
minus
select 'A only' src, v.* from v_b v
)
union all
(select 'B only' src, v.* from v_b v
minus
select 'B only' src, v.* from v_b v
)
) order by primarykeycolumn, src