0

我正在尝试找出一组列是否使用 Oracle SQL 唯一标识了 HUGE 表中的观察结果。我正在使用cx_Oracle.


背景:我是 SQL(Oracle SQL)的新手,我的任务要求我使用 HUGE 表,不幸的是这些表没有很好地记录(我什至不知道主键)。通过查看数据,我试图理解它,并试图找出一组列是否唯一标识表中的行(并且可以作为 PK)。

4

2 回答 2

1

您可以使用聚合检查它们是否唯一:

select col1, col2, col3
from t
group by col1, col2, col3
having count(*) > 1;

您还需要检查没有任何值是NULL.

于 2020-06-03T10:28:56.500 回答
1

如果表很大,使用 group by 查询可能会很慢。尝试查看是否已经有列统计信息。(警告我从记忆中编写了下面的查询,实际的列名可能不同,请检查您的 oracle 版本):

select column_name, num_distinct

来自 user_tab_col_statistics 其中 table_name = YOUR_TABLE_NAME

“last_analysed”列会告诉您何时收集统计信息 如果它们非常旧,您可以使用此命令重新收集它们(但您需要适当的权限):

begin
   dbms_stats.gather_table_stats('YOUR_TABLE_NAME', method-opt -> 'for all columns size 1'); 

结尾; /

嗯!

于 2020-06-03T10:40:59.477 回答