我有一个包含两列CountryCode CountryName
的表格。在countrycode
中有重复的条目。但我想删除非重复的条目,并保留countrycode
列中重复的行。因此,我正在尝试编写一条SQL语句来完成这个任务。我认为我需要使用Having,但不太确定如何确切地将其合并到语句中。谢谢。
我有一个包含两列CountryCode CountryName
的表格。在countrycode
中有重复的条目。但我想删除非重复的条目,并保留countrycode
列中重复的行。因此,我正在尝试编写一条SQL语句来完成这个任务。我认为我需要使用Having,但不太确定如何确切地将其合并到语句中。谢谢。
这有点奇怪。我原以为你想要删除重复的条目,而不是相反的。但是无论你使用什么数据库,以下类似的方法都可以解决:
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)
CountryCode
分组,对于每个CountryCode
,count(*)
返回具有相同CountryCode
的行数。如果有重复项,自然而然,该值将是2
或更多。但是如果没有重复项,该值将是1
。所以当我说having count(*) = 1
时,我实际上是在说我只对没有重复项的CountryCode
感兴趣。 - undefinedselect CountryCode, count(*) from TableName group by CountryCode
,并注意每个CountryCode
的count(*)
值。这样应该会更清晰明了。 - undefined这是一个快速解决方案,可能不是最快的,但适用于大量条目。
SELECT * FROM [table] AS tbl
WHERE countrycode IN
(SELECT countrycode FROM [table] WHERE tbl.countryname <> countryname)
/* Words in uppercase are SQL Syntax */
tbl
),您可以在嵌套查询中使用它。