Oracle SQL:查找和删除重复项(不同列中的值相同)

时间:2015-08-31 15:37:18

标签: sql oracle duplicate-removal ora-00933

Oracle SQL:如何查找和删除重复项

我只有对Oracle的只读访问权限(只能使用SELECT命令)。

逻辑:两位用户'A'& 'B'拥有相同的公司名称&名字

要提取的列:

ID of A
ID of B
Company Name of A
Company Name of B
First Name of A
First Name of B

我正在使用以下查询:

select a.id, b.id, a.name, b.name, a.company, b.company from
(select id, company, name where country = 'USA') a,
(select id, company, name where country = 'UK') b
where a.id <> b.id
and lower(a.company) = lower(b.company)
and a.username = b.username

这里我每次获得两行(参见下表):

A_ID .......... B_ID .......... A_NAME .......... B_NAME .......... A_COMPANY .. ........ B_COMPANY

3592382 .... 1977967 ....彼得................彼得................. A.B.C. ...................... A.B.C。

1977967 .... 3592382 ....彼得................彼得................. A.B.C. ...................... A.B.C。

5949363 .... 5941818 .... Joseph ............ Joseph .............. X.Y.Z. ..................... X.Y.Z。

5941818 .... 5949363 .... Joseph ............ Joseph .............. X.Y.Z. ..................... X.Y.Z。

2 个答案:

答案 0 :(得分:0)

您的查询存在一些问题。

1)如果您select val1,val2 from a, b,则会得到cross-join结果。

2)别名表没有from子句。

您说您只有select访问权限。因此,您只能select非重复值。

select distinct a.id, b.id, a.name, b.name, a.company, b.company 
from
(select id, company, name from tablename where country = 'USA') a
join
(select id, company, name from tablename where country = 'UK') b
on a.id = b.id and lower(a.company) = lower(b.company) and a.username = b.username

答案 1 :(得分:0)

您忘记了子查询中的表名。另外,我建议不要在两个值相同时使用a.col和b.col(这是条件),因为它会降低性能并且不会添加任何有价值的数据

{{1}}