Название: [РЕШЕНО]Связь таблиц по выбранному индексу FOREIGN KEY Отправлено: Alexorleon от Июль 08, 2013, 09:32 Здравствуйте, помогите разобрать запрос, я в postgre и в БД новичок.
Мне нужно определить есть ли внешний ключ в выбранной таблице, если есть перейти по нему и изъять имена полей. На сайте http://citforum.ru/database/interbase/interbase_03.shtml нашел что-то подобное, но не могу разобрать запрос. select rdb$relation_name , rdb$index_name from rdb$indices where rdb$index_name in (select rdb$foreign_key from rdb$indices where rdb$index_name = "RDB$FOREIGN9"); Что подставлять вместо rdb$, что это вообще? Почему в кавычках пишется RDB$FOREIGN9, а не 'FOREIGN KEY' ? У меня в БД следующие данные: схема - archive таблица - blocks_credits, в которой есть внешний ключ ссылающийся на таблицу access_users Попытался сделать так, но выдает синтаксические ошибки. Как правильно составить запрос? queryModel = new QSqlQueryModel; queryModel->setQuery("SELECT relation_name , index_name " "FROM indices WHERE index_name IN (SELECT foreign_key FROM indices " "WHERE index_name = 'FOREIGN KEY');"); treeView->setModel(queryModel); Экспериментировал с запросами, так вроде выводит имена всех внешних ключей в таблицах. "SELECT constraint_name FROM information_schema.table_constraints WHERE constraint_type = 'FOREIGN KEY';"; Название: Re: Связь таблиц по выбранному индексу FOREIGN KEY Отправлено: Alexorleon от Июль 09, 2013, 04:02 Экспериментировал с запросами, так вроде выводит имена всех внешних ключей в таблицах. "SELECT constraint_name FROM information_schema.table_constraints WHERE constraint_type = 'FOREIGN KEY';"; Вот еще похожий запрос, помогите понять что тут происходит. Как применить это к одной конкретной таблице? select fk.TABLE_NAME, pk.TABLE_NAME, c_fk.ORDINAL_POSITION, c_fk.COLUMN_NAME, c_pk.COLUMN_NAME from INFORMATION_SCHEMA.TABLE_CONSTRAINTS as fk JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS as rc on rc.CONSTRAINT_NAME = fk.CONSTRAINT_NAME JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS as pk on pk.CONSTRAINT_NAME = rc.UNIQUE_CONSTRAINT_NAME JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE as c_fk on c_fk.CONSTRAINT_NAME = fk.CONSTRAINT_NAME JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE as c_pk on c_pk.CONSTRAINT_NAME = pk.CONSTRAINT_NAME and c_pk.ORDINAL_POSITION = c_fk.ORDINAL_POSITION where fk.CONSTRAINT_TYPE = 'FOREIGN KEY' order by c_fk.ORDINAL_POSITION Название: Re: Связь таблиц по выбранному индексу FOREIGN KEY Отправлено: Alexorleon от Июль 09, 2013, 06:30 Вот еще похожий запрос, помогите понять что тут происходит. Как применить это к одной конкретной таблице? select fk.TABLE_NAME, pk.TABLE_NAME, c_fk.ORDINAL_POSITION, c_fk.COLUMN_NAME, c_pk.COLUMN_NAME from INFORMATION_SCHEMA.TABLE_CONSTRAINTS as fk JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS as rc on rc.CONSTRAINT_NAME = fk.CONSTRAINT_NAME JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS as pk on pk.CONSTRAINT_NAME = rc.UNIQUE_CONSTRAINT_NAME JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE as c_fk on c_fk.CONSTRAINT_NAME = fk.CONSTRAINT_NAME JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE as c_pk on c_pk.CONSTRAINT_NAME = pk.CONSTRAINT_NAME and c_pk.ORDINAL_POSITION = c_fk.ORDINAL_POSITION where fk.CONSTRAINT_TYPE = 'FOREIGN KEY' order by c_fk.ORDINAL_POSITION Чтож, диалог с самим собой тоже помогает =) Решение нашел, буду рад если кому пригодится. Заменяем where на эту строку. where fk.table_schema='ваша схема' AND fk.table_name='ваша таблица' AND fk.CONSTRAINT_TYPE = 'FOREIGN KEY' |