2

ID、DESCRIPTIONの2つの列を持つテーブルがあります

ID 列が一意ではありません。

テーブルの ID 列に一意の値を持たせる DELETE クエリが必要です。

たとえば、これが私の現在のテーブルである場合

ID 説明

- 5     ABC
- 5     DEF
- 6     XDX
- 6     KKK
- 7     AAA

になるようにテーブルを変更したいと思います

ID 説明

- 5     ABC
- 6     XDX
- 7     AAA

(IDごとに1行だけ残したい、どの行でも構いません。たとえば、最初の行にすることができます)

私はmysqlを使用しています

4

4 に答える 4

2

「テーブルの ID 列に一意の値を持たせるクエリが必要です。」

これにより、 ごとに 1 つのレコードが得られますID

SELECT ID, MIN(Description) Description
FROM   tableName
GROUP  BY ID

IDテーブルにunique のみを残して、 duplicate を削除する delete ステートメントをID次に示します。

警告: これにより、テーブルからレコードが削除されます。

DELETE  a
FROM    tableName a
        LEFT JOIN
        (
            SELECT ID, MIN(Description) Description
            FROM   tableName
            GROUP  BY ID
        ) b ON a.ID = b.ID AND
                a.Description = b.Description
WHERE   b.ID IS NULL
于 2013-05-30T07:48:33.387 に答える
1

最も洗練された方法は、mysql の複数テーブルの削除構文を使用して、テーブルをそれ自体に結合することです。

delete d
from mytable t
join mytable d on d.id = t.id
  and d.description > t.description

このクエリの重要な部分は、 の大なり比較ですdescription。これは、同じ行の結合を停止するだけでなく、削除する重複を予測どおりに選択します。

于 2013-05-30T08:04:38.563 に答える
0

これが実際に必要なものだと思います. テーブルから重複した行を削除してみてください

于 2013-05-30T08:06:37.987 に答える
0

PostgreSQL では、これを行うことができます。

delete 
from table1
where (id, description) not in
  (select id, min(description)
   from table1
   group by id);

MySQL が行コンストラクターをサポートしているかどうかを確認します。

(後で:MySQLは行コンストラクターをサポートしますが、これが機能しないという別の制限があります「現在、サブクエリでテーブルから削除して同じテーブルから選択することはできません。」)

于 2013-05-30T08:00:44.360 に答える