sql >> データベース >  >> RDS >> Mysql

MySQLは、複数の列を使用して重複するレコードを選択します

    複数の列の間で重複をカウントする場合は、group byを使用します :

    select ColumnA, ColumnB, ColumnC, count(*) as NumDuplicates
    from table
    group by ColumnA, ColumnB, ColumnC
    

    重複する値のみが必要な場合は、カウントが1より大きくなります。これはhavingを使用して取得します。 条項:

    select ColumnA, ColumnB, ColumnC, count(*) as NumDuplicates
    from table
    group by ColumnA, ColumnB, ColumnC
    having NumDuplicates > 1
    

    重複するすべての行を実際に返したい場合は、最後のクエリを元のデータに結合します。

    select t.*
    from table t join
         (select ColumnA, ColumnB, ColumnC, count(*) as NumDuplicates
          from table
          group by ColumnA, ColumnB, ColumnC
          having NumDuplicates > 1
         ) tsum
         on t.ColumnA = tsum.ColumnA and t.ColumnB = tsum.ColumnB and t.ColumnC = tsum.ColumnC
    

    これは、どの列値もNULLでない場合に機能します。もしそうなら、試してみてください:

         on (t.ColumnA = tsum.ColumnA or t.ColumnA is null and tsum.ColumnA is null) and
            (t.ColumnB = tsum.ColumnB or t.ColumnB is null and tsum.ColumnB is null) and
            (t.ColumnC = tsum.ColumnC or t.ColumnC is null and tsum.ColumnC is null)
    

    編集:

    NULLがある場合 値の場合、NULLを使用することもできます -安全なオペレーター:

         on t.ColumnA <=> tsum.ColumnA and
            t.ColumnB <=> tsum.ColumnB and
            t.ColumnC <=> tsum.ColumnC 
    


    1. 最高のMySQLパフォーマンスチューニングツール?

    2. ユーザーrootでlocalhost:3306でMySQLに接続できませんでした

    3. SQLServerでデータファイルとログファイルの場所を見つける方法

    4. from句の列からテーブル名をフェッチします