sql complex select语句

时间:2012-08-02 18:41:45

标签: sql sql-server oracle indexing constraints

我想在列上输入fk或索引,只有在这样的约束不存在的情况下。如果它存在,并且名称不是我想要的名称,只需重命名,否则什么也不做。为此,我正在检查SQL服务器的sys表或Oracle的所有_...表。

这是我的问题尽可能简化:

index_name              column_name
on_multiple_columns1    a
on_multiple_columns1    b

on_multiple_columns2    a
on_multiple_columns2    b
on_multiple_columns2    c

on_single_column1       b

on_single_column2       c

现在我需要在@constraintToRename语句中选择一个index_name,所以我可以将@constraintToRename重命名为'myName'(如果它已存在)并且还没有名称'myName',或者只是创建一个新的名字'myName'。 我将收到有关该列和'myName'的信息 E.g:

从'some_index_table'加入'some_other_index_table'中选择index_name到@toRename 其中'索引仅在我现在输入的列上指定,因此不返回多列索引等等'

在我的情况下,我想在列b上输入myName = test的索引。当我只选择列b的名称时,我会得到3个索引(on_multiple_columns1,on_multiple_columns2和右边的on_single_column1),但我只需要on_single_column1,所以我可以将其重命名为test。 我该如何选择? 像

这样的东西
select ... where column = 'my_column' and count(index_names) = 1

select .... where column = 'my_column' and index_name !corresponds to other columns :)

如何在SQL中表达这一点? 谢谢 SSS

1 个答案:

答案 0 :(得分:0)

受上述评论建议的启发,我现在正在使用这个:

select index_name from <table> where column_name='b' and index_name in 
(select index_name from <table> group by index_name having COUNT(index_name) = 1)

这对我来说很好,谢谢