2013-03-27 19 views
0

我有一個表(最終)在我的分貝,我想刪除所有重複的行,除了
那些誰有一個NULL值;
我試過上面:MySQL刪除除NULL以外的重複行

DELETE FROM Final 
    WHERE event_id NOT IN (SELECT MIN(event_id) AS MinID 
          FROM (SELECT * FROM Final) as x 
          GROUP BY event_name 
          AND event_name IS NOT NULL) 

,但沒有奏效。

編輯

我的表看起來像:

ID |珊瑚
1 | NULL
2 | 1
3 | 1 < - 刪除
4 | 2
5 | NULL < - 保持原樣
6 | 1 < -DELETE

+1

因爲ü沒有關閉子查詢的括號。 – PlantTheIdea 2013-03-27 14:18:47

+0

每個組中重複的列是什麼? – 2013-03-27 14:18:48

+0

event_name是列..此列可能有1,2,1,4,NULL,NUll,2 ..我想有1,2,4,NULL,NUll – 2013-03-27 14:25:43

回答

1

加入表格怎麼樣?

DELETE a 
FROM Final a 
     LEFT JOIN 
     (
      SELECT Event_name, MIN(Event_ID) MIN_ID 
      FROM Final 
      WHERE Event_name IS NOT NULL 
      GROUP BY Event_name 
     ) b ON a.Event_name = b.Event_name AND 
       a.Event_ID = b.MIN_ID 
WHERE a.Event_name IS NOT NULL AND 
     b.Event_name IS NULL 
+0

我不確定我是否瞭解您的解決方案..我只有一張表(最終) – 2013-03-27 14:29:22

+0

這與您使用子查詢的解決方案相同。嘗試執行上面的語句,但請先做一些備份。 – 2013-03-27 14:30:17

+0

它不起作用:( – 2013-03-27 16:09:32

1

AND event_name IS NOT NULL部分只需移動到主子查詢:

DELETE FROM Final 
    WHERE event_id NOT IN (SELECT MIN(event_id) AS MinID 
          FROM (SELECT * FROM Final) as x 
          GROUP BY event_name) AND event_name IS NOT NULL