【MySQL】DISTINCTで重複したデータを除外した結果を取得する方法

【MySQL】DISTINCTで重複したデータを除外した結果を取得する方法MySQL

MySQLでDISTINCTを使って指定したカラムの重複した行を除外する方法を記してます。

DISTINCTで重複値の行が除外されるGIF

補足
MySQLのLEFT JOINの使い方も知っておくと捗ります!

MySQL・DISINCTの構文

DISTINCTを使うことで、重複しているレコード(行)を除外します。

MySQLでDISTINCTを行ったテーブルのイメージ

DISTINCTの構文は、SELECTの後に記述すること。

SELECT DISTINCT 列名,列名n...FROM テーブル名

 

DISTINCTを使って重複レコードを除外してみる

以下テーブル使って、重複レコードを除外してみます。

DISTINCTの実行対象テーブル

テーブルに挿入した値↓

INSERT INTO 部品保管(No,部品名,個数) VALUES(1,'電解コンデンサ',100);
INSERT INTO 部品保管(No,部品名,個数) VALUES(3,'チップ抵抗',1000);
INSERT INTO 部品保管(No,部品名,個数) VALUES(2,'LED',3000);
INSERT INTO 部品保管(No,部品名,個数) VALUES(1,'電解コンデンサ',200);
INSERT INTO 部品保管(No,部品名,個数) VALUES(2,'LED',250);
INSERT INTO 部品保管(No,部品名,個数) VALUES(1,'電解コンデンサ',300);
INSERT INTO 部品保管(No,部品名,個数) VALUES(1,'チップ抵抗',100);

DISTINCTを使ったSQL文の実行結果

部品名の列を指定して、重複している行を除外してみます。

 

実行するDISTINCのSQL文↓

SELECT DISTINCT 部品名 FROM 部品保管;

 

部品名の重複レコードを除外するSQLの実行結果↓
部品名の列を指定してDISTINCTした結果

指定したカラムの重複しているレコードが除外されました

 

OYAKUN
OYAKUN
結果のテーブルちっちゃ!

MySQLのDISINCTを複数列で使う場合

複数列で行の値が重複している場合、除外するにはどうすればよいのか。

MySQLのDISTINCTで複数列の重複を除外するイメージ

単純に重複値を除外したいカラムの指定を増やすだけっす。

 

DISINCTを複数列で使う場合の構文↓

SELECT DISTINCT 列名1,列名n...FROM テーブル名;

 

DISTINCTで複数列の重複値を除外してみる

さきほどのテーブルを使って、複数列にまたがった重複値を除外してみます

DISTINCTの実行対象テーブル

DISTINCTで複数列を除外・実行結果

DISTINCで複数列の重複値を除外するSQL文↓

SELECT DISTINCT No,部品名 FROM 部品保管;

 

複数列の重複値を除外するDISTINCTの実行結果↓
部品保管テーブルをDISTINCTで複数列の重複を除外した結果

複数列にまたがって、重複しているレコードのみ除外されました。

補足
ちなみにこのテーブルで「個数」まで指定すると、全データ表示になるのでDISTINCTを使う意味がなくなります。

(個数の値が重複していなければ別ですが、それは登録するレコード自体が重複してる問題…) 苦笑

まとめ

MySQLのDISTINCT、スプレッドシートだとUNIQUE関数に近い処理な感じです。(UNIQUE関数は重複行だけ除外して全データ引っ張ってくれるミラクル関数

 

レコードを追加しまくって重複に気づかないときでも、DISTINCTなら一発で重複レコードを除外してくれますね。

 

ただし、DISTINCTの実行によって表示されるカラムは指定した列名だけになってしまうのが注意ポイントでしょうか。

OYAKUN
OYAKUN
DISTINC(区別する)と、意味を分かってたほうがと使いやすいかもですね^^

>【MySQL】LEFT JOINとRIGHT JOINを使って全てのデータを表示する

>【MySQL】GROUP BYで商品ごとの合計を算出する(phpMyAdmin)

>【MySQL】リレーションを設定する方法(phpMyAdmin)

コメント

タイトルとURLをコピーしました