2

如果我执行此查询:

select * 
from SYS.ALL_INDEXES
where table_name='MY_TABLE'
and owner = 'ME'
order by TABLE_OWNER, TABLE_NAME, INDEX_NAME;

我将获取表 MY_TABLE 的所有索引。其中之一是影响三列的唯一索引,我可以在 SQL Developer 中检查。

但是,从我的查询结果中,我无法判断哪个索引会影响哪些列以及有多少列受到影响。

我应该如何更改我的查询以仅获取影响多于一列的唯一索引以及该列的列表?

4

2 回答 2

1

像这样试试

SELECT i.index_name,  
       c.column_position,  
       c.column_name,  
       i.uniqueness
  FROM sys.all_indexes i, 
       sys.all_ind_columns c  
 WHERE i.table_name  = 'MY_TABLE'  
   AND i.owner       = 'ME'  
   AND i.uniqueness  = 'UNIQUE'
   AND i.index_name  = c.index_name  
   AND i.table_owner = c.table_owner  
   AND i.table_name  = c.table_name  
   AND i.owner       = c.index_owner
   AND c.index_name IN (SELECT index_name FROM sys.all_ind_columns WHERE column_position = 2);
于 2013-09-18T03:52:57.050 回答
0

您需要加入 sys.all_ind_columns 以获取索引中的列。

select * 
from SYS.ALL_INDEXES
inner join SYS.ALL_IND_COLUMNS
on SYS.ALL_INDEXES.owner = SYS.ALL_IND_COLUMNS.owner
and SYS.ALL_INDEXES.index_name = SYS.ALL_IND_COLUMNS.index_name
where table_name='MY_TABLE'
and owner = 'ME'
order by TABLE_OWNER, TABLE_NAME, INDEX_NAME;
于 2013-09-17T19:18:51.030 回答