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

重複しているレコードを検索するSQL(大量データも対応)

たまにしかやらないけど、
毎回やり方を調べている気がするので備忘録としてメモ。

DISTINCTを使って重複した行をまとめることはできるけど、
逆はできないので、強引に対応する。

列Aが重複しているデータを取得

SELECT
  A
FROM
  テーブルA
GROUP BY
  A
HAVING
  COUNT(A) > 1

列Aが重複しているデータと重複している件数も一緒に取得

SELECT
  COUNT(A) duplicate_count
  , A
FROM
  テーブルA 
GROUP BY
  A
HAVING
  COUNT(A) > 1

COUNT足しただけ。
このままだと重複している列のデータしかわからないので、他の列のデータも取得する

重複している列Aを含む全列取得

SELECT
  * 
FROM
  テーブルA
where
  A in ( 
    SELECT
      A
    FROM
      テーブルA
    GROUP BY
      A
    HAVING
      COUNT(A) > 1
  ) 
ORDER BY
  A

重複している列Aを含む全列と重複している件数を一緒に取得

SELECT
 *
FROM
  テーブルA table1
  INNER JOIN ( 
    SELECT
      COUNT(A) duplicate_count
      , A
    FROM
      テーブルA
    GROUP BY
      A 
    HAVING
      COUNT(A) > 1
  ) table2
    ON table1.A = table2.A
ORDER BY
  table1.A

上記のタイプのSQLだと
データ件数が多いと返ってこない可能性があるので、
こんな感じに書くとイケるはず(多分)。

データの件数が多いとき

SELECT
  * 
FROM
  テーブルA table1
WHERE
  EXISTS ( 
    SELECT
      *
    FROM
      テーブルA table2 
    WHERE
      table1.A = table2.A
    GROUP BY
      table2.A
    HAVING
      COUNT(table2.A) > 1
  ) 
ORDER BY
  table1.A

書いてみて、最後のやつだけでいいじゃんってなったけど気にしないw

ORDER BYでソートしてるのは見やすくするためです。

もっと良いやり方あるかもしれないけど、とりあえずこれで。

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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした