我想删除所有具有重复条目的行,我不想保留每个条目中的单个条目。我希望删除所有条目重复的条目。在这里,我提到了一些代码,它们将保持最高或最低的id值。此处的所有查询将保留来自重复记录的单个条目
Mysql
我试过的查询是
DELETE * ,count(*)as n FROM cart by rfid HAVING n>1
数据库设计:
ID(PK)|RFID |CATAGORY
1 |1 |5
2 | 1 | 5
3 | 2 | 4
4 |3 | 6
输出:
ID(PK)|RFID|CATAGORY
2 | 1 | 5
3 | 2 | 4
4 |3 | 6
预期结果:
ID(PK)|RFID|CATAGORY
3 | 2 | 4
4 |3 | 6
答案 0 :(得分:0)
选择不同的和最旧的条目(注意:使用MIN()并假设id是自动增量模式和PK),只需切换到MAX()以保留最新值。
SELECT MIN(id) FROM cart group by rfid;
全部一起(删除以前选择中没有的所有内容
DELETE FROM cart where id NOT in (SELECT MIN(id) FROM cart group by rfid);
上面不会起作用,因为你不能在FROM子句中指定更新的目标表(在这种情况下是DELETE),但你可以通过子选择进行操作,因此最终的工作查询将是:
DELETE FROM cart WHERE id NOT IN (SELECT MIN(A.id) FROM (SELECT * FROM cart) A group by A.rfid);
修改(删除所有计数> 1的条目)
DELETE FROM cart WHERE id IN(
SELECT A.id FROM (SELECT * FROM cart) A where A.rfid IN
(SELECT B.rfid from (SELECT * FROM cart) B group by B.rfid having count(B.rfid)>1)
);
答案 1 :(得分:0)
ServiceActivator
此查询解决了我的问题。谢谢你