首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle SQL:查找和删除重复项(不同列中的相同值)

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

Stack Overflow用户
提问于 2015-08-31 15:37:17
回答 2查看 129关注 0票数 0

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

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

逻辑:两个用户'A‘和'B’具有相同的公司名称和名称

要提取的列:

代码语言:javascript
复制
ID of A
ID of B
Company Name of A
Company Name of B
First Name of A
First Name of B

我正在使用的查询:

代码语言:javascript
复制
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……约瑟夫.约瑟夫.X.Y.Z.X.Y.Z.

5941818……5949363……约瑟夫.约瑟夫.X.Y.Z.X.Y.Z.

EN

回答 2

Stack Overflow用户

发布于 2015-08-31 15:48:55

您对查询有几个问题。

1)如果您执行select val1,val2 from a, b,您将得到一个cross-join结果。

2)别名表没有from子句。

你说你只能访问select。因此,您只能对非重复值进行select

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2015-08-31 16:01:34

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

代码语言:javascript
复制
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'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32314959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档