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。
答案 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}}