3

以下の表から複数の重複キーを削除したい:

id | name   | uid
1  | ekta   | 5
2  | ekta   | 5
3  | sharma | 10
4  | sharma | 10

のようになりたい

id | name   | uid
1  | ekta   | 5
3  | sharma | 10

私はmysqlを使用しています。可能ですか?unique constraintこの重複したエントリをテーブルに入力したいので、クエリを使用して一意の入力を行うことはできません 。

4

2 に答える 2

5

これを行う 1 つの方法は、 を使用してサブクエリでテーブルを結合することLEFT JOINです。サブクエリは、IDすべての最低を取得しますUID。サブクエリでレコードが一致しない場合は、一致するレコードがなく、安全に削除できることを意味します。

DELETE  a
FROM    TableName a
        LEFT JOIN
        (
            SELECT  uid, MIN(ID) min_ID
            FROM    TableName
            GROUP   BY uid
        ) b ON  a.uid = b.uid AND
                a.ID = b.min_ID
WHERE   b.uid IS NULL

ただし、のレコードにUID異なる名前を付けることができる場合はnamegroup by句に含める必要があります。そうしないuidと、最下位の一意のみIDが残ります。

DELETE  a
FROM    TableName a
        LEFT JOIN
        (
            SELECT  uid, MIN(ID) min_ID, name
            FROM    TableName
            GROUP   BY uid, name
        ) b ON  a.uid = b.uid AND
                a.ID = b.min_ID AND
                a.name = b.name
WHERE   b.uid IS NULL
于 2013-03-20T06:01:46.000 に答える
0
  DELETE DupRows.*
  FROM MyTable AS DupRows
  INNER JOIN (
            SELECT MIN(ID) AS minId, col1, col2
            FROM MyTable
            GROUP BY col1, col2
            HAVING COUNT(*) > 1
             ) AS SaveRows 
  ON SaveRows.col1 = DupRows.col1 AND SaveRows.col2 = DupRows.col2
  AND SaveRows.minId <> DupRows.ID;
于 2013-03-20T06:02:30.200 に答える