Форум: "Базы";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];
ВнизПочему-то не работает запрос? Найти похожие ветки
← →
Iova (2004-12-09 08:18) [0]Помогите пожалуйста составить запрос, который бы выводил связи между таблицами. Я составил запрос:
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
← →
Zacho © (2004-12-09 09:12) [1]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"
← →
Iova (2004-12-09 10:08) [2]Вообще-то мне хотелось бы еще узнать поля по которым связываются таблицы. Вот это как раз у меня и не получается.
Может есть какой-нибудь такой же запрос, но который бы ыдавал бы и поля, по которым связаны эти таблицы.
Help please!
← →
Iova (2004-12-09 10:29) [3]Все спасибо я нашел ошибку. Я случайно написал лишнюю строку 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
Спасибо.
Кстати мне понравился твой запрос.
Может быть я модифицирую свой, используя твой запрос.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.037 c