问题
我有一个带有 Hashtags 表的 sql 数据库,其中许多在名称方面是重复的。
像这样的声明
SELECT *
FROM HashTag
ORDER BY Name
返回类似的东西
Id | Name
1947 | test
1950 | sample
1962 | test
1963 | sample
1986 | test
2014 | example
我只想保留每个名称的 ID 最低的主题标签(“test”为 1947,“sample”为 1950)并使用此 ID 更新其他表,替换较高的 ID(例如:更新主题标签“测试”;最低 ID = 1947,更高的 ID = 1962、1986)。到目前为止,这些 sql 语句是手动更新的,如下所示:
UPDATE HashTaggedActivity
SET [HashTag_id] = 1947
WHERE HashTag_id in (1962, 1986)
Update HashTaggedGroup
SET [HashTag_id] = 1947
WHERE HashTag_id in (1962, 1986)
DELETE ht
FROM HashTag ht
WHERE ht.Id in (1962, 1986)
在此之后,我必须为 HashTag 'sample' 执行此操作,这是一个容易出错且乏味的过程。HashTag 'example' 不是重复的,不应导致更新其他表。
有没有办法为表 HashTag 中每次出现的重复名称编写一个 sql 语句来执行此操作?
到目前为止我尝试过的
我想我必须结合一个语句来获取按 Id 排序的重复计数
select ht.Id, ht.Name, htc.dupeCount
from HashTag ht
inner join (
SELECT ht.Name, COUNT(*) AS dupeCount
FROM HashTag ht
GROUP BY ht.Name
HAVING COUNT(*) > 1
) htc on ht.Name = htc.Name
ORDER BY Id
这使
Id | Name | dupeCount
1947 | test | 3
1950 | sample | 2
1962 | test | 3
1963 | sample | 2
1986 | test | 3
2014 | example | 1
根据 dupeCount 使用我的 UPDATE 和 DELETE 语句,但我不确定如何执行此操作 ;-)
在此先感谢并致以最诚挚的问候,
迈克尔