重複するレコードを調べるSQL
初歩的な質問ですみません!
重複するレコードを調べるために以下のようなSQLを作ったのですが、
遅くて困っています。
もっと速くする方法があれば教えてください!
異なるカテゴリーでも商品コードが重複しているものがないかを探すSQLです。
SELECT A.商品コード, A.X, B.カテゴリー
FROM
(SELECT COUNT(商品コード) X, 商品コード
FROM テーブルA
WHERE 追加年月 = 201008
GROUP BY 商品コード) A,
(SELECT 商品コード, カテゴリー
FROM テーブルA
WHERE 追加年月 = 201008
) B "
WHERE A.X >= 2
AND B.商品コード = A.商品コード
対象のDB、バージョン、テーブル構造、インデックスの有無くらいは最低限書きましょう。
また、どれくらいの件数でどれくらいの時間がかかっているのかも書くといいと思います。
下記のSQLがそちらの環境で使えるかわかりませんが、テーブルの読み込みが1回で済むので
最初のSQLよりは早いのではないかなと思います。
SELECT
*
FROM
(SELECT 商品コード,COUNT(*) OVER(PARTITION BY 商品コード) X, カテゴリー
FROM テーブルA
WHERE 追加年月 = 201008)
WHERE X >= 2;
SELECT B.商品コード,A.X,B.カテゴリー
FROM (SELECT 商品コード,COUNT(商品コード) X
FROM テーブルA WHERE 追加年月=201008
GROUP BY 商品コード HAVING COUNT(商品コード)>1) A
INNER JOIN テーブルA B
ON A.商品コード=B.商品コード
感覚的にはこのようなSQLになると思います。
サブクエリの方でレコード数を絞っておくべきで、結合後の
結果に対してWHERE句を割り当てるより高速です。
ただ、これで目に見えるほど改善されるかどうかは不明です。
お礼
情報が少なくてすみません。 書いて頂いたSQLでできました!! 断然に速くなりました!! ありがとうございます。