2012/06/01

SQL 重複したデータのSELECT

テーブルからあるフィールドの値が重複している行を取り出したいとき。

たとえば、TABLEAというテーブルの’Field1’,’Field2’に以下のように重複したデータが入っているとする。

 | Field1 | Field2 |  | 001 | aaa |  | 002 | bbb |  | 003 | ccc |  | 004 | ddd |  | 005 | aaa |  | 006 | bbb |

このなかで'Field2'で値が重複している列のみをSELECTしたい。

まず、'Field2'の重複している値のみを取り出すためには以下のように GROUP BY と HAVING を使って SELECT する。

select Field2 from TABLE_A
group by Field2 having COUNT( Field2 ) > 1

結果:  | Field2 |  | aaa | | bbb |

さらに、上記で取得した値を含んでいる列をすべて取得する。このときINを使う

select Field2 from TABLE_A where Field2 in
(select Field2 from TABLE_A
group by Field2 having COUNT( Field2 ) > 1)

結果:  | Field1 | Field2 |  | 001 | aaa |  | 002 | bbb |  | 005 | aaa |  | 006 | bbb |