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

SQL:クエリで重複する行を削除する必要があります

    あなたが与えたもの以外のあなたのビジネスルールのすべてを知らないので、ここにもっと一般的な解決策があります。

    可能なステータスを含む別のテーブルを作成します(または、データモデルにすでにテーブルがあります):

    CREATE TABLE status_rank (
       status   VARCHAR2(100) NOT NULL,
       rank     NUMBER NOT NULL,
       PRIMARY KEY (status_name)
    );
    

    このテーブルは、優先順位に従ってステータスをランク付けするために使用されます。つまり、重複する場合に「拒否」よりも「放棄要求」を選択する必要がある場合は、放棄に1、拒否に2の優先順位を使用します。

    これで、クエリはこの追加のランキングテーブルを利用できるようになりました:

    SELECT b.docid, r.status
      FROM b,
           status_rank r,
           (SELECT b.id, min(r.rank)
              FROM b, status_rank r
             WHERE b.status = r.status
             GROUP BY id) s
     WHERE b.docid = s.docid
       AND r.rank = s.rank
       AND b.status = r.status;
    

    実際にクエリを実行する方法は多数ありますが、これで一般的な考え方がわかるはずです。



    1. javaからmysqlにデータベースを作成する

    2. 既存のテーブルOracleにインデックスを作成する

    3. MySQLからPostgreSQLへの移行-知っておくべきこと

    4. ユーザーログオン時のPostgresqlトリガー