2015-01-15 192 views
0

刪除單個值我有一個表analyst_request從重複記錄

------------------------- 
    id | test | request_id | 
    ------------------------- 
    1 | a |NDQA201404320 
    ------------------------- 
    2 | a |NDQA201404320  
    ------------------------- 
    3 | b |NDQA201404333 
    ------------------------- 
    4 | b |NDQA201404333 

如何我剛剛刪除包含「NDQA201404320」記錄的任何重複,只留下一個相同, 建議紀錄。

+0

http://stackoverflow.com/questions/14046355/how-do-i-delete-all-the-duplicate-records-in-a-mysql-table-without-temp-tables – favoretti

回答

2

一般來說,你可以做

delete from analyst_request 
where id not in 
(
    select min(id) 
    from analyst_request 
    where request_id IN ('NDQA201404320') 
    group by test, request_id 
) 

但MySQL不能從你從選擇同一個表中刪除。所以,你需要做一個臨時表像這樣

delete from analyst_request 
where id not in 
(
    select * from 
    (
     select min(id) 
     from analyst_request 
     where request_id IN ('NDQA201404320') 
     group by test, request_id 
    ) tmp 
) 
+0

如果我想要引用某個request_id,而不是一般的記錄? – alphy

+0

你是說如果你只關心重複的'request_id'而不是'test'列?然後從查詢中刪除'test'列,你會沒事的。 –

+0

我的意思是刪除是一次一個,我可以選擇刪除有重複測試='a'的地方,然後下一次有測試='b'的地方,所以我想知道如何應用WHERE ='a'或'b',同時刪除重複值 – alphy

1

爲什麼不讓它unique領域,防止重複進入數據庫擺在首位?

1

我不能評論對克林斯曼D的答案,但如果你想引用某REQUEST_ID,那麼你想補充一點,作爲一個WHERE子句中的內SELECT語句,像這樣

select min(id) 
from analyst_request 
where request_id IN ('NDQA201404320', 'NDQA201404333') 
group by test, request_id 

希望幫助你我正確理解你的問題。除此之外,我認爲juergen的答案是正確的。

+0

非常感謝您的建議 – alphy