テーブルに重複したエントリを持つ約5人のユーザーのリストがあります。 ここには、重複したエントリを取得するために使用したクエリがあります。少数のエントリを削除する簡単な方法を提案してください。テーブル内のいくつかの重複行を削除する
USE [DB]
SELECT UserName, COUNT(*) AS CountOF
FROM UserDetails
WHERE RoleID = '2'
GROUP BY UserName
HAVING COUNT(*) > 1
テーブルに重複したエントリを持つ約5人のユーザーのリストがあります。 ここには、重複したエントリを取得するために使用したクエリがあります。少数のエントリを削除する簡単な方法を提案してください。テーブル内のいくつかの重複行を削除する
USE [DB]
SELECT UserName, COUNT(*) AS CountOF
FROM UserDetails
WHERE RoleID = '2'
GROUP BY UserName
HAVING COUNT(*) > 1
大括弧を使用すると、SQL Serverが推奨されます。もしそうなら、あなたが行うことができます:
WITH todelete as (
SELECT ud.*,
ROW_NUMBER() OVER (PARTITION BY RoleId, username ORDER BY RoleId) as seqnum
FROM UserDetails
WHERE RoleID = 2
)
DELETE FROM todelete
WHERE seqnum > 1;
注:RoleId
が数値の場合、その文字列に値を比較しません。
IDまたはCREATETIME のような別のuniqの列より多くのデータベースのサポート
with repeatData as (
SELECT UserName,COUNT(*) as CountOF,min(id) as keepTag FROM UserDetails
WHERE RoleID = '2'
GROUP BY UserName
HAVING COUNT(*)>1),
toDelData as (
select id from UserDetails
where UserName in (SELECT UserName from repeatData)
and id not in (SELECT keepTag from repeatData))
delete FROM UserDetails where id in (select id from toDelData)
を必要とするが、あなたは、MySQL(およびないSQL Server)を使用していますか?テーブルの構造は何ですか? –
私はSQL Serverを使用しています。間違ったタグが残念です – beginner