- ベストアンサー
重複
Oracle 10gを使用しております。 SELECT DISTINCTを使用すると重複している行を 除いた結果を得ることが出来ますが、 逆に重複している行のみを得るには どのようにすればよいのでしょうか? ご教授お願い致します。
- みんなの回答 (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」を指定して重複行を省く。 要件にあって効率の良い方法を試してください。
お礼
ご回答ありがとうございます。 ご教授頂いた通りしましたら、 希望していたことが出来ました。