Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Почему-то не работает запрос? [D5, IB5.x]


Iova ©   (2004-12-09 08:18:00) 

Помогите пожалуйста составить запрос, который бы выводил связи между таблицами. Я составил запрос:

SELECT
       F.RDB$RELATION_NAME,
R1.RDB$FIELD_NAME,
T.RDB$RELATION_NAME,
R2.RDB$FIELD_NAME
FROM
RDB$RELATION_CONSTRAINTS F,
RDB$RELATION_CONSTRAINTS T,
RDB$REF_CONSTRAINTS C,
RDB$INDEX_SEGMENTS I1,
RDB$INDEX_SEGMENTS I2,
RDB$RELATION_FIELDS R1,
RDB$RELATION_FIELDS R2
WHERE
C.RDB$CONSTRAINT_NAME = F.RDB$CONSTRAINT_NAME AND
T.RDB$CONSTRAINT_NAME = F.RDB$CONSTRAINT_NAME AND
T.RDB$CONSTRAINT_NAME = C.RDB$CONST_NAME_UQ AND
F.RDB$CONSTRAINT_TYPE = 'FOREIGN KEY' AND
T.RDB$CONSTRAINT_TYPE = 'PRIMARY KEY' AND
F.RDB$INDEX_NAME = I1.RDB$INDEX_NAME AND
T.RDB$INDEX_NAME = I2.RDB$INDEX_NAME AND
R1.RDB$FIELD_NAME = I1.RDB$FIELD_NAME AND
R2.RDB$FIELD_NAME = I2.RDB$FIELD_NAME AND
F.RDB$RELATION_NAME = R1.RDB$RELATION_NAME AND
T.RDB$RELATION_NAME = R2.RDB$RELATION_NAME

Запрос выполняется, но не выдает данных.
Запросы я составлял используя статью:

www.ibase.ru/devinfo/sysqry.htm


Iova   (2004-12-09 10:29:00) [1]

Все спасибо я нашел ошибку. Я случайно написал лишнюю строку 16.
Ну а если кому интересно то вот конечный запрос

SELECT
       F.RDB$RELATION_NAME,
R1.RDB$FIELD_NAME,
T.RDB$RELATION_NAME,
R2.RDB$FIELD_NAME
FROM
RDB$RELATION_CONSTRAINTS F,
RDB$RELATION_CONSTRAINTS T,
RDB$REF_CONSTRAINTS C,
RDB$INDEX_SEGMENTS I1,
RDB$INDEX_SEGMENTS I2,
RDB$RELATION_FIELDS R1,
RDB$RELATION_FIELDS R2
WHERE
C.RDB$CONSTRAINT_NAME = F.RDB$CONSTRAINT_NAME AND
T.RDB$CONSTRAINT_NAME = C.RDB$CONST_NAME_UQ AND
F.RDB$CONSTRAINT_TYPE = 'FOREIGN KEY' AND
T.RDB$CONSTRAINT_TYPE = 'PRIMARY KEY' AND
F.RDB$INDEX_NAME = I1.RDB$INDEX_NAME AND
T.RDB$INDEX_NAME = I2.RDB$INDEX_NAME AND
R1.RDB$FIELD_NAME = I1.RDB$FIELD_NAME AND
R2.RDB$FIELD_NAME = I2.RDB$FIELD_NAME AND
F.RDB$RELATION_NAME = R1.RDB$RELATION_NAME AND
T.RDB$RELATION_NAME = R2.RDB$RELATION_NAME

Данный запрос выдает список таблиц и полей
1 Название таблицы связанной по 'FOREIGN KEY'
2 Поле связывающее 1
3 Название таблицы связанной по 'PRIMARY KEY'
4 Поле связывающее 3

>Zacho
Спасибо.
Кстати мне понравился твой запрос.
Может быть я модифицирую свой, используя твой запрос.


Iova   (2004-12-09 10:08:00) [2]

Вообще-то мне хотелось бы еще узнать поля по которым связываются таблицы. Вот это как раз у меня и не получается.
Может есть какой-нибудь такой же запрос, но который бы ыдавал бы и поля, по которым связаны эти таблицы.
Help please!


Zacho   (2004-12-09 09:12:00) [3]

Iova   (09.12.04 8:18)

Честно говоря, разбираться в твоём запросе лень, но вот тебе запрос который выдаёт:
имя таблицы, имя foreign key, имя таблицы на к-рую ссылается этот ключ, имя primary key или unique в этой таблице.
Думаю, сможешь адаптировать к своим нуждам

SELECT
 RC.RDB$RELATION_NAME,
 RC.RDB$CONSTRAINT_NAME,
 RC1.RDB$RELATION_NAME,
 RF.RDB$CONST_NAME_UQ
FROM
RDB$RELATION_CONSTRAINTS RC

JOIN RDB$REF_CONSTRAINTS RF
ON RF.RDB$CONSTRAINT_NAME=RC.RDB$CONSTRAINT_NAME

JOIN RDB$RELATION_CONSTRAINTS RC1
ON RC1.RDB$CONSTRAINT_NAME=RC.RDB$CONSTRAINT_NAME

WHERE RC.RDB$CONSTRAINT_TYPE='FOREIGN KEY'


Наверх

Титульная страница Поиск, карта сайта Написать письмо