記事内に広告が含まれています。

【Oracle】DISTINCTで重複レコードを除外する

OracleのSELECT文で重複レコードを除外する方法です。DISTINCTを使用すれば、重複レコードを除外して、指定したカラムが一意で取得することが出来ます。そんなに難しい事ではなりのでサクッと行きましょう。

【スポンサーリンク】

SELECT DISTINCT で重複レコードを除外する

SELECTで取得するレコードで、重複レコードを除外したい場合は、SELECT DISTINCT を使用します。構文は以下です。

SELECT
 DISTINCT 列名のリスト
FROM
 テーブル名;

複数のカラムの重複レコードを除外したい場合は、SELECT DISTINCT の後にカラム名を並べます。

SELECT DISTINCT
  列1
 ,列2
 ,列3
 …
FROM
 テーブル名;

構文ではWHERE句を記載していませんが、WHERE句をつけても大丈夫です。

【スポンサーリンク】

使用例

では、実際に使用してみましょう。SQL確認用のテーブルを用意しました。山手線の駅番号(STATION_NO)、駅名称(STATION_NAME)、駅名カナ(STATION_KANA)、駅住所(ADDRESS)、ホーム番号1(PLATFORM_NO1)、ホーム番号2(PLATFORM_NO2)の情報を持つテーブル(山手線テーブル)です。

f:id:neko_britannia:20200727210156j:plain

山手線は同じ区の中に駅が複数あるので、何区に山手線が走っているかだけを知りたい場合は、住所の重複を除外すれば分かります。

SELECT
 DISTINCT ADDRESS
FROM
 TAB_YAMANOTE_STATION;

実行結果はこうなりました。

f:id:neko_britannia:20200727210505j:plain

画像下にも書いてますが、山手線は9つの区を走っていますね。

次に複数カラムに対してDISTINCTを実行する場合です。山手線は30駅ありますが、それぞれの駅で何番線に停まるかは駅によって違います。しかし、大体は同じ番線に停車しているので、何番線に停まるのか、重複を除外して調べてみます。

SELECT DISTINCT
  PLATFORM_NO1
 ,PLATFORM_NO2
FROM
 TAB_YAMANOTE_STATION;

では実行してみます。

f:id:neko_britannia:20200727211010j:plain

30駅ありますが、何番線に停まるかは7パターンに分類出来ますね。

【スポンサーリンク】

編集後記

GROUP BY を覚えてしまうとDISTINCTを使用する機会が減りますが、サブクエリなどで重複レコードを除外する時など、使用頻度は高めです。簡単なのでサクッと覚えてマスターしましょう。

【スポンサーリンク】

関連記事

https://stellacreate.com/entry/oracle-select-basic

【Oracle】SELECT文で検索条件を指定する
OracleのSELECT文で検索条件を指定する方法です。

.