ホームページ php教程 PHP开发 SQL はテーブル内のすべての重複レコード データを検索します

SQL はテーブル内のすべての重複レコード データを検索します

Nov 16, 2016 am 11:00 AM

1. インタビュー中に問題が発生しました。それは、id と name の 2 つのフィールドを含むテーブルを作成し、繰り返しの名前を持つすべてのデータをクエリすることです。

SELECT * from xi a where (a.username) in  (SELECT username from xi group by username  having count(*) > 1)
ログイン後にコピー

2. すべてをクエリしてグループ化した後。まず、データ、クエリ データと重複データの繰り返し数を以下に示します。

SELECT count(username) as '重复次数',username from xi group by username  having count(*)>1 order by username desc
ログイン後にコピー

3. 他の人の結果を表示するには、次の手順を実行します。 重複レコードをクエリして削除する完全な方法

1.テーブル内の重複レコードは単一フィールド (peopleId) に基づいて判断されます

SELECT * from people
where peopleId in (select  peopleId  from  people  group  by  peopleId  having  count(peopleId) > 1)
ログイン後にコピー

2. テーブル内の重複レコードは単一フィールド (peopleId) に基づいて判断され、レコードのみが残ります。最小の rowid

DELETE from people 
where peopleId  in (select  peopleId  from people  group  by  peopleId   having  count(peopleId) > 1)
and rowid not in (select min(rowid) from  people  group by peopleId  having count(peopleId )>1)
ログイン後にコピー

さらに、MySQL で上記の SQL を使用すると、次のエラーが報告されます。 FROM 句で更新対象のテーブル 'XXX' を指定することはできません。 したがって、テーブルの変更中に同じテーブルをクエリすることはできません。上記のエラーを回避するために、テーブル データを変更するための条件として一時テーブルが使用されます。

DELETE from user where user_id in(
    (SELECT user_id from 
        (SELECT c.* from cab_user c where c.extra_id in 
            (SELECT  a.extra_id  from user a group  by  a.extra_id having  count(a.extra_id) > 1) and c.user_id not in 
            (SELECT min(b.user_id) from  user b group by b.extra_id having count(b.extra_id )>1)
        ) d
    )
)
ログイン後にコピー

3. テーブル内の重複する重複レコード (複数のフィールド) を検索します

SELECT * from vitae a
where (a.peopleId,a.seq) in  (SELECT peopleId,seq from vitae group by peopleId,seq  having count(*) > 1)
ログイン後にコピー

4. テーブル内の重複する重複レコード (複数のフィールド) を削除し、最小の ROWID を持つレコードのみを残します

delete from vitae a
where (a.peopleId,a.seq) in  (SELECT peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
ログイン後にコピー

5. table 最も小さい rowid を持つレコードを除く、冗長な重複レコード (複数のフィールド)

次に、テーブル内のレコード間で「name」値の重複する項目をチェックする必要があります。

SELECT * from vitae a
where (a.peopleId,a.seq) in  (SELECT peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
ログイン後にコピー

性別も同じであることもチェックすると、結果は次のようになります:
SELECT Name,Count(*) From A Group By Name Having Count(*) > 1
ログイン後にコピー

(3)
方法 1 宣言 @max integer,@id integerdeclare cur_rows カーソルローカルを選択メインフィールド、count(*) を持つメインフィールドごとにグループ化 > 1open cur_rowsfetch cur_rows into @id,@maxwhile; @@fetch_status=0beginselect @ max = @max -1set rowcount @maxdelete from table name where main field = @idfetch cur_rows into @id,@maxendclose cur_rowsset rowcount 0

方法 2 「レコードの重複」には重複レコードの 2 つの意味があります。完全に重複したレコード、つまりすべてのフィールドが繰り返されるレコード、次に、名前フィールドなどの一部のキー フィールドが繰り返され、他のフィールドは繰り返されないか無視できるレコードです。

1. 最初のタイプの重複の場合は、select unique * from tableName を使用して、重複レコードのない結果セットを取得する方が簡単です。テーブルで重複レコードを削除する必要がある場合 (1 つの重複レコードを保持)、次のように削除できます。 select unique * into #Tmp from tableNamedrop table tableNameselect * into tableName from #Tmpdrop table #Tmp この重複の理由は、テーブルが設計が正しくありません。これは数週間で発生しますが、一意のインデックス列を追加することで解決できます。

2. この種の重複問題では、通常、重複レコードのうち最初のレコードを保持する必要があり、その操作方法は次のとおりであり、これら 2 つの一意の結果セットを取得する必要があるとします。フィールド selectidentity(int,1,1) as autoID, * into #Tmp from tableNameselect min(autoID) as autoID into #Tmp group by Name,autoIDselect * from #Tmp where autoID in(select autoID from #tmp2)最後の選択は Name、Address は重複しない結果セットです (ただし、追加の autoID フィールドがあります。この列は実際に記述するときに select 句で省略できます)

(4) 反復クエリ

SELECT Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1
ログイン後にコピー

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)