こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

重複するレコードを調べるSQL

重複するレコードを調べる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.商品コード

投稿日時 - 2010-08-18 14:24:50

QNo.6118099

すぐに回答ほしいです

質問者が選んだベストアンサー

対象のDB、バージョン、テーブル構造、インデックスの有無くらいは最低限書きましょう。
また、どれくらいの件数でどれくらいの時間がかかっているのかも書くといいと思います。
下記のSQLがそちらの環境で使えるかわかりませんが、テーブルの読み込みが1回で済むので
最初のSQLよりは早いのではないかなと思います。

SELECT
*
FROM
(SELECT 商品コード,COUNT(*) OVER(PARTITION BY 商品コード) X, カテゴリー
FROM テーブルA
WHERE 追加年月 = 201008)
WHERE X >= 2;

投稿日時 - 2010-08-18 15:41:11

お礼

情報が少なくてすみません。

書いて頂いたSQLでできました!!
断然に速くなりました!!
ありがとうございます。

投稿日時 - 2010-08-18 17:00:38

このQ&Aは役に立ちましたか?

6人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

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句を割り当てるより高速です。
ただ、これで目に見えるほど改善されるかどうかは不明です。

投稿日時 - 2010-08-18 16:37:51

ANo.1

SQLではなく、表の定義と索引の定義、重複の抽出条件を教えてください。

投稿日時 - 2010-08-18 15:35:49