我已经找到了删除重复数据的查询
DELETE FROM tbl_test t
WHERE t.ROWID > ANY (SELECT b.ROWID
FROM tbl_test b
WHERE b.ser_no = t.ser_no
);
这给了我199条记录是正确的。 由于重复记录的状态为L,F或R.所以我必须删除所有F或R的记录。
例如,如果我有两个记录
ID ser_no Sta
1 20 L
2 20 F
3 15 R
4 15 L
5 89 L
6 89 F
7 10 R
8 10 R
因此,只有一个状态R或F的副本应该被删除。没有复制品具有LL或F,R状态的情况 所以我试过
DELETE FROM tbl_test t
WHERE t.ROWID > ANY (SELECT b.ROWID
FROM tbl_test b
WHERE b.ser_no = t.ser_no
AND b.Sta<>'L'
);
它不起作用。它显示125条记录。
最终结果应为
ID ser_no Sta
2 20 F
3 15 R
6 89 F
8 10 R
答案 0 :(得分:1)
尝试使用此delete
语句,它的工作方式与规则相同,并为您的示例提供了正确的输出:
delete from tbl_test t
where t.sta in ('F', 'R') and exists (
select 1 from tbl_test b
where b.ser_no = t.ser_no
and (sta='L' or (sta<>'L' and b.id<t.id)) )
答案 1 :(得分:0)
尝试此查询
DELETE FROM tbl_test t
WHERE t.ROWID in (SELECT max(b.ROWID)
FROM tbl_test b
where b.Sta in('R','F')
group by b.ser_no,b.Sta
);