2013-03-27 209 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