Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Alexorleon
Зарегистрирован: 08.07.2013 Сообщения: 4
|
Добавлено: Пн Июл 08 2013 15:03 Заголовок сообщения: [РЕШЕНО]Связь таблиц по выбранному индексу FOREIGN KEY |
|
|
Здравствуйте, помогите разобрать запрос, я в 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';";
Последний раз редактировалось: Alexorleon (Вт Июл 09 2013 06:36), всего редактировалось 1 раз |
|
Вернуться к началу |
|
 |
Alexorleon
Зарегистрирован: 08.07.2013 Сообщения: 4
|
Добавлено: Вт Июл 09 2013 04:06 Заголовок сообщения: Re: Связь таблиц по выбранному индексу FOREIGN KEY |
|
|
Alexorleon писал(а): |
Экспериментировал с запросами, так вроде выводит имена всех внешних ключей в таблицах.
"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 |
|
Вернуться к началу |
|
 |
Alexorleon
Зарегистрирован: 08.07.2013 Сообщения: 4
|
Добавлено: Вт Июл 09 2013 06:35 Заголовок сообщения: Re: Связь таблиц по выбранному индексу FOREIGN KEY |
|
|
Alexorleon писал(а): | Вот еще похожий запрос, помогите понять что тут происходит. Как применить это к одной конкретной таблице?
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' |
|
Вернуться к началу |
|
 |
|