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
方法 2 「レコードの重複」には重複レコードの 2 つの意味があります。完全に重複したレコード、つまりすべてのフィールドが繰り返されるレコード、次に、名前フィールドなどの一部のキー フィールドが繰り返され、他のフィールドは繰り返されないか無視できるレコードです。
1. 最初のタイプの重複の場合は、select unique * from tableName を使用して、重複レコードのない結果セットを取得する方が簡単です。テーブルで重複レコードを削除する必要がある場合 (1 つの重複レコードを保持)、次のように削除できます。 select unique * into #Tmp from tableNamedrop table tableNameselect * into tableName from #Tmpdrop table #Tmp この重複の理由は、テーブルが設計が正しくありません。これは数週間で発生しますが、一意のインデックス列を追加することで解決できます。
SELECT Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1