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

Oracleの重複行のすべてのデータを表示する

    GROUP BYはいつでも使用できます / HAVING IN句でクエリを実行します。これは機能し、比較的簡単ですが、重複する行の数が比較的多い場合は、特に効率的ではない可能性があります。

    SELECT *
      FROM table1
     WHERE (name, type_id) IN (SELECT name, type_id
                                 FROM table1
                                GROUP BY name, type_id
                               HAVING COUNT(*) > 1)
    

    一般に、2回目のテーブルへのヒットを回避するために、分析関数を使用する方が効率的です。

    SELECT *
      FROM (SELECT id, 
                   name,
                   type_id,
                   code,
                   lat,
                   long,
                   count(*) over (partition by name, type_id) cnt
              FROM table1)
     WHERE cnt > 1
    

    データをどのように処理するか、および特定の行の重複がいくつあるかに応じて、table1に参加することもできます。 単一の行でデータを取得するためにそれ自体に

    SELECT a.name,
           a.type_id,
           a.id,
           b.id,
           a.code,
           b.code,
           a.lat,
           b.lat,
           a.long,
           b.long
      FROM table1 a
           JOIN table1 b ON (a.name = b.name AND
                             a.type_id = b.type_id AND
                             a.rowid > b.rowid)
    


    1. 権限を持つ役割を削除する

    2. PHPPDOプリペアドステートメントでのMySQL関数の使用

    3. OracleSQLを使用した文字列内の特定の文字列の取得

    4. IPアドレスがデータベースに保存されているかどうかを確認します