Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

重複レコードの抽出

やりたいこと

以下のようなテーブルが存在した場合に「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
t-kikuchi
都内SEです。忘れがちな基礎をメモしています。
https://outdoor-development.work/index/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away