SQL 重複排除クエリ方法: 単一フィールド peopleId に基づいて重複レコードを判断し、ステートメントを使用して削除します。コードは [where peopleId in (peopleId で people グループから peopleId を選択]) です。
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で重複したクエリを削除する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。