11

Oracle のテーブルの 3 つの列のセットが一意のキーを構成し、1:1 の関係で使用できるかどうかを判断しようとしています。

このクエリを実行し、キーが一意の組み合わせである場合、count> 1 は表示されないはずですよね?

select count(*) from my_table t    
group by t.a, t.b, t.c

この決定を行うためのより良い/代替方法はありますか?

4

2 に答える 2

21

HAVINGこの句を使用して、重複を簡単に識別します。

select t.a, t.b, t.c, count(1) 
from my_table t    
group by t.a, t.b, t.c 
having count(1) > 1;
于 2012-05-31T16:20:09.413 に答える
1

テーブルに十分な量のデータがある場合は、おそらく簡単に実行できます

SELECT t.a, t.b, t.c, count(*)
  FROM my_table t
 GROUP BY t.a, t.b, t.c
HAVING COUNT(*) > 1

そのクエリが 0 行を返す場合、3 つの列は (現在) 一意です。そのクエリが 1 つ以上の行を返す場合、どの値が重複しているかがわかります。

もちろん、3 つの列が現在一意であることがわかった場合、その事実を利用する場合は、一意の制約を作成する必要があります。

于 2012-05-31T16:21:16.580 に答える