【问题标题】:sql complex select statementsql复杂选择语句
【发布时间】:2012-08-02 18:41:44
【问题描述】:

我想在列上输入一个 fk 或索引,但前提是这样的约束不存在。如果它存在,并且名称不是我想要的,只需重命名它,否则什么都不做。为此,我正在检查 SQL 服务器的 sys 表或 Oracle 的 all_... 表。

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

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

现在我需要一个 select index_name into @constraintToRename 语句,所以我可以将 @constraintToRename 重命名为“myName”(如果它存在并且还没有名称“myName”),或者如果不存在则创建一个新名称。 我将提供有关该列和“myName”的信息 例如:

选择 index_name 到 @toRename from 'some_index_table' join 'some_other_index_table' where '索引仅在我现在输入的列上指定,因此不返回多列索引,依此类推'

就我而言,我想在 b 列上输入带有 myName = test 的索引。当我只选择 b 列的名称时,我会得到 3 个索引(on_multiple_columns1、on_multiple_columns2 和正确的一个 on_single_column1),但我只需要 on_single_column1 以便我可以重命名它以进行测试。 我该怎么做这个选择? 类似的东西

select ... where column = 'my_column' and count(index_names) = 1

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

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

【问题讨论】:

  • 使用group by index_name having count(*) = 1
  • @Nikola Markovinović:问题在于,当我有 where column='my_column' 时,所有索引的 count(*) = 1。当我没有该列时='my_column',然后我只在一个列上指定所有 index_names -> 在这种情况下 on_single_column1 和 2,但我只想要与列 b 对应的那个 -> on_single_column1

标签: sql sql-server oracle indexing constraints


【解决方案1】:

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

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)

这对我来说很好用,谢谢

【讨论】:

    猜你喜欢
    • 2013-05-12
    • 2012-04-29
    • 1970-01-01
    • 2016-10-19
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多