2017-07-19 63 views
0

我有兩個表,每個表中有三個以上的字段。有是在這兩個文件一組記錄,下面是一個模擬例如:基於三個字段和兩個表刪除重複數據

表1:

ID Name Town State 1 Dave Chicago IL 2 Mark Tea MD

表2:

ID Name State Job Married 1 Dave IL Manager Yes 2 Mark MD Driver No

我的目的如果ID,名稱和狀態相同,則存在重複項。所以上面的數據是重複的。我如何從一個表中刪除它們(我有900多個重複項,因此不能逐個刪除)?

+0

ID是不是兩個表中的主鍵?爲什麼你需要打擾名稱和狀態?或者,可能相反:ID與名稱和狀態有什麼關係? –

+0

ID不是任一表中的主鍵。身份證,姓名和州一起是什麼定義的唯一性。如上所述,這些是模擬示例,實際數據包括SSN,生效日期和Code1等字段。使用這些數據的系統允許SSN,有效日期和代碼的任意組合,除了三者之外,這些組合可以創建重複數據。 – Cameron

回答

0
delete table1 
where ID in(select distinct ID from table1 where ID in (Select ID from table2)) 

我不明白這表有重複的,如果你想從一個表1中刪除重複數據,那麼你可以使用這個查詢

+0

這是行不通的,因爲ID不是主鍵 – Cameron

0

此查詢將產生的消除重複的結果集:

SELECT Table1.ID, 
    Table1.NAME, 
    Table1.Town, 
    Table1.STATE, 
    NULL AS Job, 
    NULL AS Married 
FROM Table1 
WHERE Table1.ID NOT IN (
     SELECT Table1.ID 
     FROM Table1 
     INNER JOIN Table2 ON (Table2.STATE = Table1.STATE) 
     AND (Table2.NAME = Table1.NAME) 
     AND (Table1.ID = Table2.ID) 
     ) 

UNION 

SELECT Table2.ID, 
    Table2.NAME, 
    NULL AS Town, 
    Table2.STATE, 
    Table2.Job, 
    Table2.Married 
FROM Table2 
0

這是最直接的方法,假設你想從表1中刪除。我用Access SQL語法有點生疏,但我相信這是有效的:

DELETE FROM [Table1] 
WHERE EXISTS (
    SELECT 1 
    FROM [Table2] 
    WHERE [Table2].[ID]  = [Table1].[ID] 
     AND [Table2].[Name] = [Table1].[Name] 
     AND [Table2].[State] = [Table1].[State] 
) 
+0

我開始運行這個查詢,但它在超過30分鐘後仍在處理中,看起來並沒有接近完成。我正在查詢table2中的幾千條記錄,table1中大約有45萬條記錄,所有這些都直接保存在access中。你知道這個查詢是否有問題,或者它是否有太多的訪問數據來處理這個特定的查詢? – Cameron

+0

@Cameron我想嘗試在兩個表的ID,名稱和狀態上創建一個多字段索引。這應該會提高性能。完成刪除重複項後,如果這是一次性操作,則可以刪除索引。 –

相關問題