CREATE TEMPORARY TABLE allDoubles (SELECT vi.* FROM visit_items as vi JOIN(SELECT visit_id, item_id, tag, count(*) AS bar FROM visit_items GROUP BY item_id,visit_id,tag HAVING bar > 1 ) AS foo ON foo.item_id = vi.item_id AND foo.visit_id = vi.visit_id AND foo.tag = vi.tag );CREATE TEMPORARY TABLE allGroupedDoubles (SELECT * FROM allDoubles GROUP BY visit_id,item_id,tag);DELETE FROM visit_items WHERE id IN (SELECT id FROM allDoubles) AND id NOT IN (SELECT id FROM allGroupedDoubles)