1

typecreateという名前の列が 1 つだけあるという名前のテーブルがあります。namevarchar(16)

ここで、重複する名前をすべて削除し、そのうちの 1 つだけを残したいと思います。

例:

 name1
 name2
 name3
 name3
 name3
 name4

後は

 name1
 name2
 name3
 name4

ご意見をお聞かせください。

クエリを探していましたが、使用可能なクエリのほとんどはインデックスに関係していました。

4

2 に答える 2

1

row_numberを使用します

 WITH    cte
 AS 
 ( SELECT name, row_number() OVER ( PARTITION BY name ORDER BY name ) AS row_num
    FROM     yourTable
 )
DELETE  FROM cte
WHERE   row_num > 1
于 2012-07-25T17:27:52.903 に答える
0

MySQLのインデックスは、データベースエンジンがデータを効果的に分割およびソートして、クエリをより効率的にするための方法です。インデックスで実行できることの1つは、データの特定の列またはフィールドに一意のエントリのみが含まれるように指定することです。このようなインデックスを作成すると、すでに保存されているデータを追加できなくなります。

インデックスのない列がすでにある場合、重複を削除することをお勧めする1つの方法は、一時テーブルを使用することです。元のテーブルからすべての一意の(異なる)名前を選択して、一時テーブルを作成します。次に、元のテーブルのすべてを削除し、レコードをコピーして戻します。その時点で、インデックスを追加することを検討してください。

于 2012-07-25T17:30:08.243 に答える