我有两张桌子说a和b
SQL> desc a;
Name Type
----------------------------------------- ----------------------------
ID NUMBER(38)
NAME VARCHAR2(10)
SQL> desc b;
Name Type
----------------------------------------- ----------------------------
ID NUMBER(38)
NAME VARCHAR2(10)
SQL>从a;
中选择* ID NAME
1 a
1 a
1 a
2 b
2 b
3 c
3 c
4 d
SQL> select * from b;
ID NAME
1 a
2 b
我的输出应该是
ID NAME
1 a
1 a
2 b
3 c
3 c
4 d
当我这样做时
SQL>从减号中选择* *从b;
ID NAME
3 c
4 d
但这不是我想要的......请帮帮我
答案 0 :(得分:1)
为什么名为id
的列不是表中的唯一ID?一些命名惯例没有意义。
在任何情况下,您都会遇到问题,因为您有完全重复的行,无法区分它们。幸运的是,Oracle有一个解决方案。您可以使用row_number()
或rownum
创建唯一密钥,然后使用此密钥删除重复项。
select a.*
from (select a.*, row_number() over (partition by id, name order by id) as seqnum
from a
) a left outer join
(select b.*, row_number() over (partition by id, name order by id) as seqnum
from b
) b
on a.id = b.id and a.seqnum = b.seqnum
where b.id is NULL;
答案 1 :(得分:0)
一种方法是
select id,type from
(
select rownum,id,type from table1 minus select rownum,id,type from table2
) temp