Oracle SQL。检查一组变量是否能唯一地识别表中的观测值。

问题描述 投票:0回答:1

我试图用Oracle SQL找出一组列是否能唯一地识别一个大表中的观测值。. 我正在通过Python访问一个Orcacle Exadata平台,使用的是 cx_Oracle.


背景:我是一个SQL新手(Oracle SQL),我的任务要求我处理巨大的表,可惜没有很好的文档(我甚至不知道主键)。我是SQL(Oracle SQL)的新手,我的任务要求我处理庞大的表,不幸的是,这些表没有很好的记录(我甚至不知道主键)。通过观察数据,我试图理解这些数据,我试图找出某一组列是否能唯一地识别表中的行(并且可以作为PK)。

sql oracle cx-oracle exadata
1个回答
1
投票

你可以使用聚合来检查它们是否是唯一的。

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

你还需要检查是否没有一个值是 NULL.


1
投票

如果表很大,使用group by query可能会很慢,试着看看是否已经有列统计了。(WARNING I write the query below from my memory, the actual column names could be different check your oracle version):

select column_name, num_distinct

from user_tab_col_statisticswhere table_name = YOUR_TABLE_NAME

last_analysed "一栏告诉你什么时候收集的统计数据如果它们很旧,你可以用这个命令重新收集它们(但你需要适当的权限)。

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

end;

hth!

© www.soinside.com 2019 - 2024. All rights reserved.