この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 14609|答える: 0

[ヒント] SQL 重複を除去するためのテーブルのクエリ方法

[リンクをコピー]
掲載地 2014/10/09 11:03:04 | | |

SQLのシングル/マルチテーブルクエリは重複レコードを削除します

単一の表で区別されます

  1. select distinct 字段 from 表
コードをコピーします

多くの投票はグループ分けされています

グループバイは注文・制限の前に置かなければならず、そうでなければエラーが報告されます

************************************************************************************

1. テーブル内の冗長な重複レコードを見つけ、重複レコードは単一のフィールド(peopleId)に基づいて判断されます。

セレクト * From People(人から)
ここで peopleId(peopleIdがcount(peopleId)> 1を持つ人々グループから選択)

2. テーブル内の冗長な重複レコードを削除し、重複レコードは単一のフィールド(peopleId)に基づいて判断され、最小のロイドを持つレコードだけが残ります
人から削除
ここで peopleId(peopleIdがcount(peopleId)> 1を持つ人々グループから選択)
rowidに属しません(peopleIdからmin(rowid)を選択し、peopleIdがcount(peopleId)>1)

3. テーブル内の冗長重複レコード(複数フィールド)を探す
Vitae Aより * 選択
ここで(a.peopleId, a.seq) は(vitaeグループからpeopleId, seqをpeopleId, seqで選択)で、count(*) > 1)

4. テーブル内の重複レコード(複数のフィールド)を削除し、最小のrowidを持つレコードだけを残す
Vitae Aから削除
ここで(a.peopleId, a.seq) は(vitaeグループからpeopleId, seqをpeopleId, seqで選択)で、count(*) > 1)
および rowid に属さない(vitae group から min(rowid) を peopleId, seq で count(*)>1)


5. テーブル内の冗長な重複レコード(複数のフィールド)を見つけ、最小のロイド(記録)を含まない
Vitae Aより * 選択
ここで(a.peopleId, a.seq) は(vitaeグループからpeopleId, seqをpeopleId, seqで選択)で、count(*) > 1)
および rowid に属さない(vitae group から min(rowid) を peopleId, seq で count(*)>1)

(2)
例えば
表Aには「name」というフィールドがあります。
また、「名前」値が異なるレコード間で同じになることもあります。
次に、テーブル内のレコード間で「名前」値が重複するアイテムをクエリする必要があります。
グループ名からcount(*)> 1 を持つグループから選択

性別も同じ場合は以下の通りです。
グループから名前、性別、カウント(*)を選択する 名前、性別 カウント(*) > 1

(3)
方法1

整数@max@id 整数を宣言する

メインフィールドを選択しcur_rowsカーソルをローカルに宣言し、カウント(*)をテーブル名グループからメインフィールドごとにカウント(*)>します。 1

オープンcur_rows

@idにcur_rowsを呼んで@max

@@fetch_status=0の場合

開始

選択 @max = @max -1

行数を@max設定

プライマリフィールド = @id のテーブル名から削除

@idにcur_rowsを呼んで@max
終わり

近いcur_rows

行数を0に設定

方法2

「重複レコード」には2つの意味があります。1つは完全に重複したレコード、すなわちすべてのフィールドが重複しているレコード、もう1つは重要なフィールドの部分が重複しているレコードで、例えば名前フィールドが重複している場合などです。ただし、他のフィールドは必ずしも重複していないか無視可能です。

1. 最初の反復タイプについては、比較的簡単に解いて使えます

tableNameからselect distinct *

重複レコードなしで結果セットを入手できます。

重複レコードを削除したい場合は(重複レコードを1つ残す)、以下のように削除できます

tableNameからdistinct *を #Tmp に選択します

ドロップテーブルテーブル tableName

tableNameから*を選択し #Tmp
ドロップテーブル #Tmp

この重複はテーブル設計の不備により起こり、一意のインデックス列を追加することで解決できます。

2. この種の重複問題は通常、重複レコードの最初のレコードを保持し、操作方法は以下の通りです

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

autoIDとしてidentity(int,1,1)を選択し、tableNameから*を #Tmp に変換します

名前、autoIDでグループからautoIDとしてmin(autoID)をautoIDとして選択 #Tmp2 #Tmp

自動IDが入っている #Tmp から*を選択してください(自動IDを #tmp2 から選択)

最後の選択では、繰り返し表示されないNameとAddressの結果セットを受け取ります(ただし、実際に書き込む際にselect節に書くことができる追加のautoIDフィールドがあります)

(4)
クエリは重複されています

テーブル名から * を選択 (ID from tablename in in (テーブル名から ID 選択)

IDによるグループ化

カウント(ID)> 1

)

3. テーブル内の冗長重複レコード(複数フィールド)を探す
Vitae Aより * 選択
ここで(a.peopleId, a.seq) は(vitaeグループからpeopleId, seqをpeopleId, seqで選択)で、count(*) > 1)

実行すると問題が発生し、where(a.peopleId, a.seq)のような書き込みや送信はうまくいきません!!






先の:SQLはパラメータ付きのストアドプロシージャを作成します
次に:EPUBReaderリーダー、EPUBファイルを開く際の必須アイテム
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com