0

問題

ハッシュタグのテーブルを含む 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ステートメントを使用しますが、これを行う方法がわかりません;-)

よろしくお願いいたします。

マイケル

4

2 に答える 2