0

テーブル sql から重複を削除する簡単な方法があるかどうかを知りたいと思いました。

テーブル全体をフェッチするのではなく、データが 2 回表示された場合にデータを削除します。

前もって感謝します

これは私の構造です:

CREATE TABLE IF NOT EXISTS `mups` (
  `idgroupe` varchar(15) NOT NULL,
  `fan` bigint(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
4

4 に答える 4

1

SQL Server を使用している場合

これを確認してください: SQL SERVER – 2005 – 2008 – 重複行の削除

CTEを使用したサンプル コード:

/* Delete Duplicate records */
WITH CTE (COl1,Col2, DuplicateCount)
AS
(
SELECT COl1,Col2,
ROW_NUMBER() OVER(PARTITION BY COl1,Col2 ORDER BY Col1) AS DuplicateCount
FROM DuplicateRcordTable
)
DELETE
FROM CTE
WHERE DuplicateCount > 1
GO
于 2013-01-10T14:30:53.270 に答える
0

テーブルをそれ自体に結合し、重複を探しているフィールドごとにグループ化を行い、countが1より大きいhaving句を使用すると、重複を見つけることができます。

テーブル名がcustomersであり、重複する名前フィールドを探しているとします。

select cust_out.name, count(cust_count.name)
from customers cust_out
  inner join customers cust_count on cust_out.name = cust_count.name
group by cust_out.name
having count(cust_count.name) > 1

これをdeleteステートメントで使用すると、レコードを保持する予定がある場合に、重複するすべてのレコードが削除されます。

したがって、削除するレコードを選択するには、

select cust_dup.id
from customers cust
  inner join customers cust_dup on cust.name = cust_dup.name and cust_dup.id > cust.id
group by cust_dup.id
于 2013-01-10T14:38:34.053 に答える
0

行全体のチェックサムを取る計算列を追加します。重複するチェックサムを検索し、重複をランク付けして削除します。

于 2013-01-10T14:29:04.627 に答える
0

次のようなことができます:

DELETE from yourTable WHERE tableID in 
(SELECT clone.tableID 
 from yourTable origine,
  yourTable clone 
 where clone.tableID= origine.tableID)

ただし、WHERE では、インデックスを比較するか、他のフィールドを比較することができます...

ダブルスをどのように見つけるかによって異なります。

注、このソリューションには、何をダブルにするかを選択できるという利点があります(たとえば、PKが変更された場合)

于 2013-01-10T14:31:52.113 に答える