• ベストアンサー

重複

Oracle 10gを使用しております。 SELECT DISTINCTを使用すると重複している行を 除いた結果を得ることが出来ますが、 逆に重複している行のみを得るには どのようにすればよいのでしょうか? ご教授お願い致します。

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

  • ベストアンサー
  • 3rd_001
  • ベストアンサー率66% (115/174)
回答No.1

以下のような方法で判断しているのが多いと思います。 (1)重複しているキーの判別 select deptno,count(*) from emp group by deptno having count(*) > 1; 「group by」で重複しているかを判断する項目を指定し集計を行う。集計結果から「having句」で「count(*) 」の結果を「 > 1」に当てはまるものだけを抽出する。 (2) 1の結果から得た重複項目をWhere句として利用し、重複行を全表示する。 select * from emp where deptno in( select deptno from emp group by deptno having count(*) > 1 ); ※10gだと分析ファンクションが使えるので以下のような書き方も可能。 select * from ( select a.* ,COUNT(*) OVER (partition BY deptno) count from emp a ) where count > 1; サブクエリ内でcountを分析ファンクションとして使用して、「partition BY 」で集計する項目を指定する。その結果にWhere句で「> 1」を指定して重複行を省く。 要件にあって効率の良い方法を試してください。

shin-cyan
質問者

お礼

ご回答ありがとうございます。 ご教授頂いた通りしましたら、 希望していたことが出来ました。

関連するQ&A