dポイントプレゼントキャンペーン実施中!

お世話になります。Oracle9iで、
タイトル通りですが、一つの表から
重複したレコード・重複していないレコード
を出力したいのですが、「こうかな?」と思った
SELECT文が30分ちかく返ってきません(^^;
他に方法があれば教えて頂きたく質問致しました。
よろしくご教授下さい!

(以下のSQLで、重複した行は"exists"で、
重複していない行は"not exists"もしくは
"having count(*) = 1"でできるかな?
と思ってましたが・・・)

テーブル名:結果
キー項目(とみなすカラム):番号・名称・年月日
出力したい項目:結果.データ・もしくは結果.*

--データが複数
select a.番号,a.名称,a.年月日,a.データ
from 結果 a
where exists
--キーの重複SELECT
(
select 番号,名称,年月日,count(*)
from 結果 j
where j.年月日 >= '1992/04/01'
and j.年月日 <= '1993/03/31'
and a.番号= j.番号
and a.名称= j.名称
and a.年月日 = j.年月日
group by j.番号,j.名称,j.年月日
having count(*) > 1
)

A 回答 (2件)

キー項目とは、主キーとは違うようですね。

30分もかかるのは、SQLのせいではなさそうです。
・キー項目にインデックスを貼る。
・データが多いようならアナライズ。
を試してみてください。

sqlで直すなら、以下の点ぐらいです。
select 番号,名称,年月日,count(*)

select 1
existsは、存在するかどうかなので、カラムをselectする必要はありません。
(たぶんオプティマイザが何とかしてくれてると思います^^;
    • good
    • 0
この回答へのお礼

早々にご回答ありがとうございます。
ご指摘通りインデックスを作成してリトライしましたが、返ってきませんでした(^^;
対処方(逃げ!?)として、
重複レコードを出力するビュー、
重複していないレコードを出力するビューを作成することにしました。
今回は納期が迫っているため、上記方法で対処しますが、
今度時間がある時に、原因突き止めたいと思います。
ご教授ありがとうございました!

お礼日時:2005/04/25 18:19

結果テーブルに対して次のようなインデックスは作成されていますか?



CREATE INDEX 結果インデックス ON 結果 (番号, 名称, 年月日);

作成されていないようなら作成してみてください。
    • good
    • 0
この回答へのお礼

ご回答感謝!です。
今回は「奥の手(逃げの手!?)」で対応しようと
思います。
ありがとうございました!

お礼日時:2005/04/25 18:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す