删除重复记录 Firebird SQL
Delete duplicated records Firebird SQL
我想删除重复的行,所以我使用这个 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
我需要 delete 语句,它可以帮助我删除重复的值,这样我的 table 就可以像这样:
id IDCARD YEAR IDRODZ
1 80 2014 5
4 80 2015 5
如何实现?
因为你有一个唯一的 ID,你可以这样做:
delete from my_card
where id not in (select min(id)
from my_card
group by idcard, year);
这将为每个 (idcard, year) 组合保留具有最小 ID 的行。如果你想保留最大的id,在sub-select.
中使用max(id)
我想删除重复的行,所以我使用这个 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
我需要 delete 语句,它可以帮助我删除重复的值,这样我的 table 就可以像这样:
id IDCARD YEAR IDRODZ
1 80 2014 5
4 80 2015 5
如何实现?
因为你有一个唯一的 ID,你可以这样做:
delete from my_card
where id not in (select min(id)
from my_card
group by idcard, year);
这将为每个 (idcard, year) 组合保留具有最小 ID 的行。如果你想保留最大的id,在sub-select.
中使用max(id)