11

我正在尝试确定 Oracle 中表上的一组三列是否构成唯一键并且可以在 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 行,则这三列(当前)是唯一的。如果该查询返回 1 行或更多行,您将知道哪些值是重复的。

当然,如果您发现这三列当前是唯一的,那么如果您打算利用这一事实,则需要创建一个唯一约束。

于 2012-05-31T16:21:16.580 回答