2009-04-14 20 views
0

私は列id、a、およびbを持つテーブルを持っています。重複するフィールドのコンボを見つける方法

a + bは一意である必要がありますが、これは正しく制約されていない従来のデータベースです。 + bが一意でないレコードのIDを取得するにはどうすればよいですか?私は

ID A B 
1 2 3 
2 2 3 
3 1 3 
4 1 4 

をお持ちの場合は

は、それから私は戻って、クエリからのレコード1と2を取得したいです。ウィンドウ関数を使用して少し速く

SELECT 
    * 
FROM 
    your_table 
    INNER JOIN (
    SELECT a, b FROM your_table GROUP BY a, b HAVING COUNT(*) > 1 
) dupes ON 
    your_table.a = dupes.a AND 
    your_table.b = dupes.b 
+0

同様の質問(最近の、異なりますアプローチ)http://stackoverflow.com/a/3504059/5962841 – Mafii

答えて

4
select 
    id, a, b 

from your_table t 

join (select a, b from your_table group by a, b having count(1) > 1) dup on dup.a = t.a and dup.b = t.b 
+1

さて、あなたは私にそれを打つ。メソッド(JOIN)と言い回しに至るまで。しかし、私はスクロールしません。ハ! ;-)速くなるために+1。 – Tomalak

3

select * 
from (
    select 
     a 
    , b 
    , cnt = count(*) over (partition by a, b) 
    from your_table 
) x 
where cnt > 1; /* Dupe */ 
+0

おなじみに見えます;) –

+0

* lol *しかし、あなたは最初からそうではありませんでした。誰もそれを証明することはできませんが、*私は*知っています。 ;-) – Tomalak

1

:これを使用する、(あなたが述べたように)戻って 1と2を取得するには

関連する問題