2013-08-04 133 views
0

我已經使用mysql查詢來選擇我在數據庫中重複的條目。MySql查詢選擇然後刪除

select id,DATE_FORMAT(cu_date,'%Y-%m-%d %T'),trunk_id ,count(*) from circuit_u 
WHERE DATE_FORMAT(cu_date,'%Y-%m-%d') = '2013-01-26' 
group by DATE_FORMAT(cu_date,'%Y-%m-%d %T'),trunk_id 
HAVING count(*) > 1; 

輸出:

16347 2013-01-26 01:00:00 0 2 
16372 2013-01-26 01:00:00 1 2 
16397 2013-01-26 01:00:00 100 2 
16422 2013-01-26 01:00:00 101 2 
16447 2013-01-26 01:00:00 121 2 
16472 2013-01-26 01:00:00 211 2 
16497 2013-01-26 01:00:00 221 2 
16522 2013-01-26 01:00:00 311 2 

現在我想添加一個命令將其刪除。

我嘗試了很多方法,但每次失敗。

請幫忙。

+0

如果你已經嘗試過這麼多你爲什麼不張貼?所以我們可以糾正你不給你的答案 –

+0

你想刪除只有重複或每個重複項? –

+0

每個條目都有一個副本。我的意思是無論我上面的查詢返回將被刪除。因爲我只能找到重複數據 – iamlancer

回答

2

你可以試試這個

DELETE from circuit_u WHERE id IN (select * from (
    select id from circuit_u 
    WHERE DATE_FORMAT(cu_date,'%Y-%m-%d') = '2013-01-26' 
    group by DATE_FORMAT(cu_date,'%Y-%m-%d %T'),trunk_id 
    HAVING count(*) > 1) t 
    ) 
+0

抱歉,男人沒用。錯誤1241操作數應該包含一列 – iamlancer

+0

再次出現同樣的錯誤 – iamlancer

+0

試試這個更新的答案 –

0

不能從同一個表在同一個SQL查詢訪問和刪除行,不管你如何嘗試,相信我。你至少需要兩個查詢。

我已經完成了這之前與三:「一個查詢爲ID創建一個臨時內存表;另一個填充您想刪除(或保留..);行ID的最後一個查詢將原始表和臨時表聯繫起來,從第一個表中刪除行。「

(注:如果您使用臨時表,你必須在同一個連接執行三個查詢。)