Reputation: 577
I have a table (Final) in my db and i want to delete all the duplicate rows except
those who have a NULL value;
I tried the above :
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)
but didn't work.
edit
my table seems like:
id | Coral
1 | NULL
2 | 1
3 | 1 <- DELETE
4 | 2
5 | NULL <- STAY as it is
6 | 1 <-DELETE
Upvotes: 0
Views: 178
Reputation: 77707
Just move the AND event_name IS NOT NULL
part to the main subquery:
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
Upvotes: 1
Reputation: 263803
how about joining the tables?
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
Upvotes: 1