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)の情報を持つテーブル(山手線テーブル)です。
山手線は同じ区の中に駅が複数あるので、何区に山手線が走っているかだけを知りたい場合は、住所の重複を除外すれば分かります。
SELECT DISTINCT ADDRESS FROM TAB_YAMANOTE_STATION;
実行結果はこうなりました。
画像下にも書いてますが、山手線は9つの区を走っていますね。
次に複数カラムに対してDISTINCTを実行する場合です。山手線は30駅ありますが、それぞれの駅で何番線に停まるかは駅によって違います。しかし、大体は同じ番線に停車しているので、何番線に停まるのか、重複を除外して調べてみます。
SELECT DISTINCT PLATFORM_NO1 ,PLATFORM_NO2 FROM TAB_YAMANOTE_STATION;
では実行してみます。
30駅ありますが、何番線に停まるかは7パターンに分類出来ますね。
編集後記
GROUP BY を覚えてしまうとDISTINCTを使用する機会が減りますが、サブクエリなどで重複レコードを除外する時など、使用頻度は高めです。簡単なのでサクッと覚えてマスターしましょう。
関連記事
https://stellacreate.com/entry/oracle-select-basic
.