删除重复的记录Firebird SQL

时间:2016-11-25 10:32:03

标签: sql duplicates firebird

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

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;

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

 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

我需要删除语句,这有助于我删除重复的值,以便我的表看起来像这样:

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

我怎样才能实现它?

1 个答案:

答案 0 :(得分:1)

由于您拥有唯一的ID,因此可以执行以下操作:

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

这将保持每个(idcard,year)组合的id最小的行。如果您想保留最大的ID,请在子选择中使用max(id)

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