Oracle のテーブルの 3 つの列のセットが一意のキーを構成し、1:1 の関係で使用できるかどうかを判断しようとしています。
このクエリを実行し、キーが一意の組み合わせである場合、count
> 1 は表示されないはずですよね?
select count(*) from my_table t
group by t.a, t.b, t.c
この決定を行うためのより良い/代替方法はありますか?
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;
テーブルに十分な量のデータがある場合は、おそらく簡単に実行できます
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 つの列が現在一意であることがわかった場合、その事実を利用する場合は、一意の制約を作成する必要があります。