2015-08-31 80 views
0

的Oracle SQL:如何找到並刪除重複的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 .... Peter ...... ..........彼得................. ABC ..................... A.B.C.

1977967 .... 3592382 .... Peter ................ Peter ................. 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 
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' 
相關問題