【PostgreSQL】UNION ALLの結果から重複データだけを抽出するSQLを解説

※ この記事にはアフィリエイトリンクが含まれます

PostgreSQLでUNION ALL を使ってクエリを作成したとき、

  • 同じデータが複数出力される
  • 重複しているレコードを特定したい

といった場面に遭遇することがあります。

UNION ALL は複数のSELECT結果を結合するSQLですが、UNION とは違い重複データもそのまま結果に含まれるという特徴があります。

そのため、データ調査やデータ結合の処理では、

「どのデータが重複しているのか」

を確認する必要が出てくることがあります。

この記事では、PostgreSQLでUNION ALLした結果から重複データだけを抽出するSQLを解説します。

SQLでデータ調査をする際に役立つテクニックなので、ぜひ参考にしてください。

目次

UNION ALLした結果から重複データを抽出する方法

UNION ALL した結果から重複データだけを抽出するには、GROUP BYCOUNTを使います。

以下のSQLを見てみましょう。

SELECT name, COUNT(*)
FROM (
    SELECT name FROM table_a
    UNION ALL
    SELECT name FROM table_b
) t
GROUP BY name
HAVING COUNT(*) > 1;

このSQLでは次のような処理を行なっています。

  1. UNION ALL でデータをまとめる
  2. GROUP BY で同じデータをグループ化する
  3. COUNT(*) で出現回数を数える
  4. HAVING COUNT(*) > 1 で重複データのみ抽出する

つまり、2回以上出現しているデータだけを取得するSQLになっています。

実行結果のイメージ

次のようなテーブルがあったとします。

table_a

name
Tanaka
Sato

table_b

name
Tanaka
Suzuki

この2つのテーブルをUNION ALL すると、次のような結果になります。

name
Tanaka
Sato
Tanaka
Suzuki

この状態で先ほどのSQLを実行すると、次の結果になります。

namecount
Tanaka2

このように、重複しているデータのみを抽出することができます

重複しているレコードの中身を確認したい場合

重複しているキーが分かった後に、

  • 実際のレコード内容を確認したい
  • どのテーブルのデータが重複しているのか調査したい

といったケースもあると思います。

その場合は、次のようにWITH句(CTE)を使うと、分かりやすく書くことができます。

WITH union_data AS (
    SELECT name FROM table_a
    UNION ALL
    SELECT name FROM table_b
)
SELECT *
FROM union_data
WHERE name IN (
    SELECT name
    FROM union_data
    GROUP BY name
    HAVING COUNT(*) > 1
);

このSQLでは、

  1. UNION ALL した結果を union_data として定義
  2. 重複しているキーを抽出
  3. そのキーに該当するレコードを取得

という流れになっています。

WITH句についての詳しい内容はこちらの記事が参考になります。

これにより、重複しているレコードの詳細を確認することができます。

まとめ

今回は、UNION ALLした結果から重複データを抽出する方法を紹介しました。

ポイントをまとめると次の通りです。

  • UNION ALL は重複データもそのまま出力される
  • GROUP BYCOUNT(*) を使うことで重複データを抽出できる
  • HAVING COUNT(*) > 1 を使うと、重複しているデータのみ取得できる
  • レコードの詳細を確認する場合は WITH句 を使うと便利

データ調査やデータ品質の確認を行う際には、ぜひ活用してみてください。

PostgreSQLは、現場でも広く使われている信頼性の高いデータベースです。
もしこれから本格的に学び、実務で通用する力をつけたい方には、RareTECHをチェックしてみてください。
実案件ベースのカリキュラムで、あなたのスキルを次のステージへ引き上げてくれるはずです。


なんくる

「本当にエンジニアとしてやっていけるか不安…」という方も、実践的な開発に関わることで、転職後の働き方を事前に体感できますよ。

実務で使えるDBスキルとともに、プログラミングスキルをちゃんと身につけたいなら、
RareTECH無料カウンセリングで、学ぶ目的やゴールをプロと一緒に明確にしてみましょう。独学では得られない「実践的な成長の道筋」が見えてきます。


もしこの内容を通して、PostgreSQLについてさらに理解を深めたいと感じられたなら、信頼できる講座や書籍を紹介した別記事をご覧いただくのも良いかと思います。ご自身の学びに、きっとお役立ていただけるはずです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

沖縄出身のエンジニアです。IT業界で5年以上の経験があり、主にC#やPHPを使って開発を行ってきました。新しい技術にも興味があり、日々学びながらスキルアップを目指しています。

コメント

コメントする

CAPTCHA


目次