|
SQLのシングル/マルチテーブルクエリは重複レコードを削除します 単一の表で区別されます - 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)のような書き込みや送信はうまくいきません!!
|