我想删除重复的行,所以我使用这个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
我怎样才能实现它?
答案 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)
。