2013-11-20 65 views
6

我有一張有人名地址和職位的表格。 這些名字有時會重複。我必須比較,如果兩個人有相同的姓名和地址,那麼我只能保留他們的1條記錄。如何在表格中找到重複的名稱

Table: Data_Excel 
Name: P_Name 
Address: P_Address 
City: P_city 
+0

看到這個: http://stackoverflow.com/questions/529098/removing-duplicate-rows-from-table-in-oracle – Younes

+0

呃,什麼約兩_different_人具有相同的名稱和地址的可能性?像兄弟會中的兩個約翰史密斯一樣?或者是一對夫婦,男女皆宜的名字?這是你需要擔心的事嗎? –

回答

8

要找到你能做的重複:

SELECT P_name, 
    P_Address, 
    P_city 
FROM Data_Excel 
GROUP BY P_Name, 
    P_Address, 
    P_city 
HAVING COUNT(*) > 1; 

刪除重複,你可以這樣做:

DELETE 
FROM Data_Excel 
WHERE rowid NOT IN (
    SELECT MIN(rowid) 
    FROM Data_Excel 
    GROUP BY P_Name, 
     P_Address, 
     P_city 
    ); 

中插入人的表,你會怎麼做:

INSERT INTO Person(id,name) 
SELECT (SELECT MAX(id)+1 FROM Person),P_Name 
FROM Data_Excel WHERE P_Name NOT IN (SELECT name FROM Person) 
+0

感謝您的及時響應,現在如果我必須從Data_excel表中添加ID和姓名的人名錶中的名稱與檢查:名稱應該添加一次名稱不應該存在人表中已經 –

+1

@ user408437。我添加了一個簡單的方法來做到這一點。 –

+0

如果我不刪除重複值從Data_Excel和比插入?並且在個人表中的ID不是自動遞增的,在這種情況下,我如何獲取最後一個ID併爲每個插入增加ID的值? –

2
SELECT P_Name,P_Address,count(*) 
FROM Data_Excel 
GROUP BY P_Name,P_Address 
HAVING count(*) > 1; 

這會給你同樣的記錄P_Name & P_Address

+0

感謝您的及時回覆,現在如果我要插入人表ID名稱從Data_excel表檢查名稱: 名稱應加一次 名稱不應該當面表已經存在 –

+0

你想先檢查姓名是否存在於「人」表中?如果不是,插入它們,如果是,則不做任何事情?那是你要的嗎? – SajjadHashmi

+0

是的,如果我在Data_excel中有多個條目,我只輸入一次名稱。 –