删除重复的记录Firebird SQL [英] Delete duplicated records Firebird SQL

查看:91
本文介绍了删除重复的记录Firebird SQL的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想删除重复的行,所以我使用了这个select语句来查找所有重复的行.

I want to delete duplicated rows, so I used this select statement to find all duplicated rows.

SELECT * FROM MY_CARD T1
INNER JOIN( SELECT IDCARD, YEAR FROM MYCARD GROUP BY IDCARD, YEAR HAVING COUNT(IDCARD) > 1 ) T2 ON T1.IDCARD = T2.IDCARD AND T1.YEAR=T2.YEAR
WHERE T1.IDRODZ = 5 AND IDCARD=80;

我的结果看起来像这样,但这只是一个简短的例子,有更多重复的记录.

My result looks like that, but this is only short example, there are more duplicated records.

 ID   IDCARD    YEAR IDRODZ
 1     80   2014    5
 2     80   2014    5
 3     80   2014    5
 4     80   2015    5
 5     80   2015    5
 6     80   2015    5

我需要delete语句,它可以帮助我删除重复的值,以便我的表看起来像这样:

I need delete statement, that helps me to delete duplicated values, so that my table could look like that:

 id  IDCARD   YEAR  IDRODZ
  1  80        2014      5
  4  80        2015      5

我该如何实现?

推荐答案

有了唯一的ID,您可以执行以下操作:

As you have a unique ID, you can do something like this:

delete from my_card
where id not in (select min(id)
                 from my_card
                 group by idcard, year);

这将使每个(身份证,年份)组合的ID最小的行保持不变.如果要保留最大的ID,请在子选择中使用max(id).

That will keep the rows with the smallest id for each (idcard, year) combination. If you want to keep the biggest id, use max(id) in the sub-select.

在线示例: http://rextester.com/WXTU26543

这篇关于删除重复的记录Firebird SQL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆