0

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 .... 彼得 .... 彼得 .... ABC .... ................. ABC

1977967 .... 3592382 .... 彼得 .... 彼得 .... ABC .... ................. ABC

5949363 .... 5941818 .... 约瑟夫 ...... 约瑟夫 ...... XYZ ...... .......... XYZ

5941818 .... 5949363 .... 约瑟夫 ...... 约瑟夫 ........ XYZ ...... .......... XYZ

4

2 回答 2

0

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

SELECT a.id, b.id, a.name, a.company
FROM tablename a
JOIN tablename b
    ON (a.name == b.name AND a.company == b.company AND a.username == b.username)
WHERE a.country = 'USA'
    AND b.country = 'UK'
于 2015-08-31T16:01:34.137 回答
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
于 2015-08-31T15:48:55.920 回答