問題
ハッシュタグのテーブルを含む sql データベースがありますが、その多くは名前に関して重複しています。
みたいな発言
SELECT *
FROM HashTag
ORDER BY Name
のようなものを返します
Id | Name
1947 | test
1950 | sample
1962 | test
1963 | sample
1986 | test
2014 | example
各名前の ID が最も低いハッシュタグ (「テスト」の場合は 1947、「サンプル」の場合は 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 の「例」は重複していないため、他のテーブルを更新することはありません。
テーブル 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ステートメントを使用しますが、これを行う方法がわかりません;-)
よろしくお願いいたします。
マイケル