admin

SQL删除表中的非重复项

sql

我有一张两栏的桌子CountryCode CountryName。中有重复的条目countrycode。但是我想删除非重复的整体,并在列中保留重复的countrycode行。因此,我正在尝试编写一条SQL语句来执行此操作。我认为我必须使用“具有但不十分确定如何正确地合并它”。谢谢


阅读 180

收藏
2021-06-07

共1个答案

admin

有点奇怪。我期望您要删除重复的条目,而不是相反。但是无论您使用的是哪种数据库,类似这样的东西都应该起作用:

delete from TableName
 where CountryCode in (select CountryCode
                         from TableName
                        group by CountryCode
                        having count(*) = 1).

因此要明确,子查询:

select CountryCode
  from TableName
 group by CountryCode
having count(*) = 1

…返回具有唯一性的行CountryCodes。然后delete声明:

delete from TableName
 where CountryCode in (...)

…删除那些唯一的行,以便表中剩余的唯一行应该是重复的行。

但是,根据您的评论,听起来您只需要一个只返回重复项的查询。如果是这种情况,则只需在select语句内使用子查询,但修改having子句以仅返回重复项:

select *
  from TableName
 where CountryCode in (select CountryCode
                        from TableName
                       group by CountryCode
                      having count(*) > 1)
2021-06-07