ホームページ データベース SQL SQLで重複したクエリを削除する方法

SQLで重複したクエリを削除する方法

Oct 10, 2020 am 11:37 AM
sql

SQL 重複排除クエリ方法: 単一フィールド peopleId に基づいて重複レコードを判断し、ステートメントを使用して削除します。コードは [where peopleId in (peopleId で people グループから peopleId を選択]) です。

SQLで重複したクエリを削除する方法

SQL 重複排除クエリ方法:

重複レコードを削除する SQL 単一テーブル/複数テーブル クエリ

単一テーブルの個別のクエリ

複数のテーブル group by

group by は order by と limit の前に配置する必要があります、そうしないとエラーが報告されます

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)
ログイン後にコピー

3. テーブル

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

で重複する重複レコード (複数フィールド) を検索します。テーブル内の重複する重複レコード (複数フィールド) を削除し、最小の 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. 最小の ROWID を持つレコードを除外して、テーブル内の重複する重複レコード (複数のフィールド) を検索します。

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)
ログイン後にコピー

(2)

例:

テーブル A に「名前」というフィールドがあります。

異なるレコード間の「名前」値は同じである可能性があります。

次に、「名前」値をクエリする必要があります。テーブル内の各レコード間に重複項目があります;

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

性別も同じ場合、結果は次のようになります:

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

(3)

方法 1

declare @max integer,@id integer
declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) >; 1
open cur_rows
fetch cur_rows into @id,@max
while @@fetch_status=0
begin
select @max = @max -1
set rowcount @max
delete from 表名 where 主字段 = @id
fetch cur_rows into @id,@max
end
close cur_rows
set rowcount 0
ログイン後にコピー

方法 2

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

1. 最初のタイプの繰り返しについては、解決が簡単です。

select distinct * from tableName
ログイン後にコピー
を使用します。

重複レコードのない結果セットを取得するには。

テーブルで重複レコードを削除する必要がある場合 (1 つの重複レコードを保持)、次のように削除できます。

select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp
ログイン後にコピー

この理由重複はテーブル設計が不適切です。一意のインデックス列を追加することで解決できます。

2. この種の重複問題は、通常、重複レコードのうち最初のレコードを保持する必要があります。操作方法は次のとおりです

Name と Address という名前の重複フィールドがあり、これら 2 つの一意のフィールドを持つ結果セットを取得する必要があるとします。

select identity(int,1,1) as autoID, * into #Tmp from tableName
select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
select * from #Tmp where autoID in(select autoID from #tmp2)
ログイン後にコピー

最後の選択の結果、Name と Address の重複しない結果セットが生成されます。アドレス (ただし、追加の autoID フィールドがあり、実際の書き込み時にこの列を省略するために select 句に書き込むことができます)

(4)

重複クエリ

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

3. ルックアップ テーブル

select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
ログイン後にコピー
に過剰な重複レコード (複数のフィールド) があると、実行時に問題が発生します。where(a.peopleId,a.seq) のような記述は通過し​​ません。 ! !

関連する学習に関する推奨事項:

SQL ビデオ チュートリアル

以上がSQLで重複したクエリを削除する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

Hibernate フレームワークにおける HQL と SQL の違いは何ですか? Hibernate フレームワークにおける HQL と SQL の違いは何ですか? Apr 17, 2024 pm 02:57 PM

HQL と SQL は Hibernate フレームワークで比較されます。HQL (1. オブジェクト指向構文、2. データベースに依存しないクエリ、3. タイプ セーフティ)、SQL はデータベースを直接操作します (1. データベースに依存しない標準、2. 複雑な実行可能ファイル)。クエリとデータ操作)。

Oracle SQLでの除算演算の使用法 Oracle SQLでの除算演算の使用法 Mar 10, 2024 pm 03:06 PM

「OracleSQLでの除算演算の使用方法」 OracleSQLでは、除算演算は一般的な数学演算の1つです。データのクエリと処理中に、除算演算はフィールド間の比率を計算したり、特定の値間の論理関係を導出したりするのに役立ちます。この記事では、OracleSQL での除算演算の使用法を紹介し、具体的なコード例を示します。 1. OracleSQL における除算演算の 2 つの方法 OracleSQL では、除算演算を 2 つの異なる方法で実行できます。

Oracle と DB2 の SQL 構文の比較と相違点 Oracle と DB2 の SQL 構文の比較と相違点 Mar 11, 2024 pm 12:09 PM

Oracle と DB2 は一般的に使用される 2 つのリレーショナル データベース管理システムであり、それぞれに独自の SQL 構文と特性があります。この記事では、Oracle と DB2 の SQL 構文を比較し、相違点を示し、具体的なコード例を示します。データベース接続 Oracle では、次のステートメントを使用してデータベースに接続します: CONNECTusername/password@database DB2 では、データベースに接続するステートメントは次のとおりです: CONNECTTOdataba

MyBatis動的SQLタグのSetタグ機能の詳細説明 MyBatis動的SQLタグのSetタグ機能の詳細説明 Feb 26, 2024 pm 07:48 PM

MyBatis 動的 SQL タグの解釈: Set タグの使用法の詳細な説明 MyBatis は、豊富な動的 SQL タグを提供し、データベース操作ステートメントを柔軟に構築できる優れた永続層フレームワークです。このうち、Set タグは、UPDATE ステートメントで SET 句を生成するために使用され、更新操作でよく使用されます。この記事では、MyBatis での Set タグの使用法を詳細に説明し、特定のコード例を通じてその機能を示します。 SetタグとはMyBatiで使用するSetタグです。

SQL の ID 属性は何を意味しますか? SQL の ID 属性は何を意味しますか? Feb 19, 2024 am 11:24 AM

SQL における Identity とは何ですか? 具体的なコード例が必要です。SQL では、Identity は自動インクリメント数値の生成に使用される特別なデータ型です。多くの場合、テーブル内のデータの各行を一意に識別するために使用されます。 Identity 列は、各レコードが一意の識別子を持つようにするために、主キー列と組み合わせてよく使用されます。この記事では、Identity の使用方法といくつかの実用的なコード例について詳しく説明します。 Identity の基本的な使用方法は、テーブルを作成するときに Identity を使用することです。

Java は MySQL ドライバー インターセプターをどのように使用して、時間のかかる SQL 計算を実装しますか? Java は MySQL ドライバー インターセプターをどのように使用して、時間のかかる SQL 計算を実装しますか? May 27, 2023 pm 01:10 PM

背景: 企業のニーズの 1 つは、企業の既存のリンク トラッキング ログ コンポーネントが MySQL の SQL 実行時間の出力をサポートする必要があるということです。リンク トラッキングを実装する一般的な方法は、サードパーティのフレームワークまたはツールによって提供されるインターセプタ インターフェイスまたはフィルタ インターフェイスを実装することです。 MySQL も例外ではなく、実際には、MySQL によって駆動されるインターセプタ インターフェイスを実装しているだけです。 MySQL チャネルにはさまざまなバージョンがあり、バージョンごとにインターセプタ インターフェイスが異なるため、使用する MySQL ドライバのバージョンに応じて応答インターセプタを実装する必要があります。次に、MySQL チャネル 5 と 6 をそれぞれ紹介します8。バージョンの実装。ここでは、Statem を実装する例として MySQL チャネル 5.1.18 バージョンを使用して MySQL5 を実装します。

SQL の 5120 エラーを解決する方法 SQL の 5120 エラーを解決する方法 Mar 06, 2024 pm 04:33 PM

解決策: 1. ログインしているユーザーがデータベースにアクセスまたは操作するための十分な権限を持っているかどうかを確認し、ユーザーが正しい権限を持っているかどうかを確認します; 2. SQL Server サービスのアカウントに指定されたファイルまたはデータベースにアクセスする権限があるかどうかを確認します。 3. 指定されたデータベース ファイルが他のプロセスによって開かれているかロックされているかどうかを確認し、ファイルを閉じるか解放して、クエリを再実行します。管理者として試してください。Management Studio をなどとして実行します。

SQL ステートメントを使用せずに Springboot+Mybatis-plus を実装して複数のテーブルを追加する方法 SQL ステートメントを使用せずに Springboot+Mybatis-plus を実装して複数のテーブルを追加する方法 Jun 02, 2023 am 11:07 AM

Springboot+Mybatis-plus が SQL ステートメントを使用して複数テーブルの追加操作を実行しない場合、私が遭遇した問題は、テスト環境で思考をシミュレートすることによって分解されます: パラメーターを含む BrandDTO オブジェクトを作成し、パラメーターをバックグラウンドに渡すことをシミュレートします。 Mybatis-plus で複数テーブルの操作を実行するのは非常に難しいことを理解してください。Mybatis-plus-join などのツールを使用しない場合は、対応する Mapper.xml ファイルを設定し、臭くて長い ResultMap を設定するだけです。対応する SQL ステートメントを記述します。この方法は面倒に見えますが、柔軟性が高く、次のことが可能です。

See all articles