【Oracle】【PL/SQL】重複レコードの抽出

重複レコードの抽出

やりたいこと

以下のようなテーブルが存在した場合に「PRODUCT_CD」、「PRODUCT_NAME」が重複しているレコードを抽出します。

ID PRODUCT_CD PRODUCT_NAME PRICE
1 p001 ノート 350
2 p002 ボールペン 150
3 p002 ボールペン 100
4 p003 手帳 1000
5 p003 手帳 500
6 p003 手帳 350

重複レコードを1行にまとめて抽出

重複しているレコードをGROUP BYHAVING句を使用して抽出します。

SELECT product_cd,
       product_name,
       COUNT(1)             -- 重複している件数
FROM  product_tbl
GROUP BY product_cd, product_name
HAVING COUNT(1) > 1
;

抽出結果は以下のようになります。

PRODUCT_CD PRODUCT_NAME COUNT(1)
p002 ボールペン 2
p003 手帳 3

重複レコードを全件抽出

上記SQLでは重複レコードをまとめて抽出しましたが、重複レコードの内容を詳しく確認したい場合もあります。 その場合には下記のように対象データを副問い合わせを使用して抽出します。

SELECT *
FROM product_tbl
WHERE (product_cd, product_name) 
      IN (
         SELECT product_cd, product_name
         FROM product_tbl
         GROUP BY product_cd, product_name
         HAVING COUNT(*) > 1
         )
ORDER BY product_cd
;

抽出結果は以下のようになります。

ID PRODUCT_CD PRODUCT_NAME PRICE
2 p002 ボールペン 150
3 p002 ボールペン 100
4 p003 手帳 1000
5 p003 手帳 500
6 p003 手帳 350

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA