web-dev-qa-db-ja.com

一意の制約列リストを取得します(SQLで)?

次のクエリを使用すると、一意の制約のリストをかなり簡単に取得できます。

select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where CONSTRAINT_TYPE='UNIQUE'

しかし、各一意制約が適用される列のリストを取得するにはどうすればよいですか?

35
anakic

見る INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE

29
Ed Harper

Edは正しいです。列は制約列の使用状況ビューに表示されます。これがそのSQLです。

select TC.Constraint_Name, CC.Column_Name from information_schema.table_constraints TC
inner join information_schema.constraint_column_usage CC on TC.Constraint_Name = CC.Constraint_Name
where TC.constraint_type = 'Unique'
order by TC.Constraint_Name
46
Andrew
SELECT *
FROM    sys.indexes i
        JOIN sys.index_columns ic
            ON i.index_id = ic.index_id
               AND i.object_id = ic.object_id
WHERE i.is_unique_constraint = 1;
4
Kenny Evitt

MySQLユーザーの参照用に、以下のクエリでも同じことが実現できます。

テーブルの一意の制約を見つけるには

select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where CONSTRAINT_TYPE='UNIQUE' and table_name='db_my_table'

すべての列を含む一意の列リストを見つけるには

select * from INFORMATION_SCHEMA.KEY_COLUMN_USAGE where CONSTRAINT_NAME='cons_name' and TABLE_NAME='db_my_table'

必要なビューを持つ一意の列リストを見つける

select CONSTRAINT_NAME,COLUMN_NAME,TABLE_NAME from INFORMATION_SCHEMA.KEY_COLUMN_USAGE where CONSTRAINT_NAME='cons_name' and TABLE_NAME='db_my_table'
0
Sanjay Jain