如何在不使用distinct和union的情况下返回两个表之间的唯一记录?

时间:2014-12-30 23:10:47

标签: sql oracle11g

我需要返回两个表之间的唯一记录。理想情况下,UNION可以解决我的问题,但是当我执行UNION / distinct时,两个表都包含一个对象字段,它给出了一个错误(不能没有MAP或ORDER方法的ORDER对象)。

所以,我想知道我是否可以做一个UNION ALL(以避免错误)先获取所有记录,然后做一些事情只返回那里的唯一记录。我尝试将解析函数与UNION ALL查询相结合,但到目前为止还没有运气。

Select * from Table1
union all
Select * from table2

有任何帮助吗?注意:我需要返回所有字段。

3 个答案:

答案 0 :(得分:1)

我实际上使用分析函数+ row_num解决了这个问题。查询将为每组重复项选择第一条记录,因此只返回唯一记录。

select * from
 (
    select ua.*,row_number() over (partition by p_id order by p_id ) row_num from 
    (
        select * from table1
        union all
        select * from table2
    )ua
) inner
where inner.row_num=1

答案 1 :(得分:0)

这个怎么样:

SELECT DISTINCT A.* FROM
(
 Select * from Table1
 union all
 Select * from table2
) A;

(或)

SELECT col1,col2,col3...coln FROM
(
 Select col1,col2,col3...coln from Table1
 union all
 Select col1,col2,col3...coln from table2
) A
GROUP BY A.col1,col2,col3...coln;

答案 2 :(得分:-1)

UNION ALL也将提供重复值..而是使用UNION并查看您是否面临错误