powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Получить имя связанной таблицы - запрос к системным таблицам
17 сообщений из 17, страница 1 из 1
Получить имя связанной таблицы - запрос к системным таблицам
    #39662404
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не смог найти информацию ни в сети( http://www.ibase.ru/sysqry/#anchor_4), ни в структуре системных таблиц.

Есть основная таблица table1 и куча справочников ref1, ref2, ref_n.
В основной таблице есть поля id_ref1, id_ref2, id_ref_n и соответственно внешние ключ на таблицы-справочники.
В общем, стандартная ситуация.
Помогите с запросом: как найти имя таблицы справочника, имея имя столбца основной таблицы + имя основной таблицы.
IBExprert показывает связи в том числе определяет имена связанных столбцов, но как он это делает, не могу понять.

Спасибо.
...
Рейтинг: 0 / 0
Получить имя связанной таблицы - запрос к системным таблицам
    #39662405
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В IBExpert есть поиск по метаданным, но искать в системных таблицах он не хочет.
...
Рейтинг: 0 / 0
Получить имя связанной таблицы - запрос к системным таблицам
    #39662408
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11> Помогите с запросом: как найти имя таблицы справочника,
X11> имея имя столбца основной таблицы + имя основной таблицы.

См. таблицу RDB$REF_CONSTRAINTS

Запрос уж как-нибудь сам осилишь, мне лень.

X11> IBExprert показывает связи в том числе определяет имена
X11> связанных столбцов, но как он это делает, не могу понять.

Подсказываю - в IBE есть заветная кнопка SQL Monitor чи как её
там - жмёшь её, переходишь на нужную вкладку в нужном окошке,
возвращаешься в SQL Monitor и находишь и смотришь нужный запрос.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Получить имя связанной таблицы - запрос к системным таблицам
    #39662420
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

доработанный запрос N4

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT
    F.RDB$RELATION_NAME AS DETAIL_TABLE_NAME,
    F.RDB$CONSTRAINT_NAME AS FOREIGN_KEY_NAME,
    INDF.RDB$FIELD_NAME AS DETAIL_FIELD_NAME,
    T.RDB$RELATION_NAME AS MASTER_TABLE_NAME,
    T.RDB$CONSTRAINT_NAME AS PRIMARY_KEY_NAME,
    INDT.RDB$FIELD_NAME AS MASTER_FIELD_NAME
FROM
    RDB$REF_CONSTRAINTS C
    JOIN RDB$RELATION_CONSTRAINTS F ON C.RDB$CONSTRAINT_NAME = F.RDB$CONSTRAINT_NAME
    JOIN RDB$INDEX_SEGMENTS INDF ON INDF.RDB$INDEX_NAME = F.RDB$INDEX_NAME
    JOIN RDB$RELATION_CONSTRAINTS T  ON T.RDB$CONSTRAINT_NAME = C.RDB$CONST_NAME_UQ
    JOIN RDB$INDEX_SEGMENTS INDT ON INDT.RDB$INDEX_NAME = T.RDB$INDEX_NAME
ORDER BY F.RDB$RELATION_NAME, T.RDB$RELATION_NAME 
...
Рейтинг: 0 / 0
Получить имя связанной таблицы - запрос к системным таблицам
    #39662421
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамСм. таблицу RDB$REF_CONSTRAINTS
Я её уже крутил по всякому, в том числе и RDB$RELATION_CONSTRAINTS.


Гаджимурадов РустамПодсказываю - в IBE есть заветная кнопка SQL Monitor чи как её
там - жмёшь её, переходишь на нужную вкладку в нужном окошке,
возвращаешься в SQL Monitor и находишь и смотришь нужный запрос.

ок, попробую
спасибо
...
Рейтинг: 0 / 0
Получить имя связанной таблицы - запрос к системным таблицам
    #39662423
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

о!
спасибо
...
Рейтинг: 0 / 0
Получить имя связанной таблицы - запрос к системным таблицам
    #39662464
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11> Я её уже крутил по всякому, в том числе и RDB$RELATION_CONSTRAINTS.

Господи, да что там крутить-то... Ищешь по имени индекса в RDB$INDICES имя таблицы
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Получить имя связанной таблицы - запрос к системным таблицам
    #39662502
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.

X11Помогите с запросом: как найти имя таблицы справочника, имея имя столбца основной таблицы + имя основной таблицы.


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select tc.RDB$RELATION_NAME,
       ti.RDB$FIELD_NAME
  from RDB$RELATION_CONSTRAINTS sc
  join RDB$INDEX_SEGMENTS       si on ( si.RDB$INDEX_NAME      = sc.RDB$INDEX_NAME      )
  join RDB$REF_CONSTRAINTS      rc on ( rc.RDB$CONSTRAINT_NAME = sc.RDB$CONSTRAINT_NAME )
  join RDB$RELATION_CONSTRAINTS tc on ( tc.RDB$CONSTRAINT_NAME = rc.RDB$CONST_NAME_UQ   )
  join RDB$INDEX_SEGMENTS       ti on ( ti.RDB$INDEX_NAME      = tc.RDB$INDEX_NAME AND
                                        ti.RDB$FIELD_POSITION  = si.RDB$FIELD_POSITION  )
 where sc.RDB$CONSTRAINT_TYPE = 'FOREIGN KEY'
   and sc.RDB$RELATION_NAME = <имя основной таблицы>
   and si.RDB$FIELD_NAME = <имя столбца основной таблицы>


С уважением, Polesov.
...
Рейтинг: 0 / 0
Получить имя связанной таблицы - запрос к системным таблицам
    #39665421
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисX11,

доработанный запрос N4

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT
    F.RDB$RELATION_NAME AS DETAIL_TABLE_NAME,
    F.RDB$CONSTRAINT_NAME AS FOREIGN_KEY_NAME,
    INDF.RDB$FIELD_NAME AS DETAIL_FIELD_NAME,
    T.RDB$RELATION_NAME AS MASTER_TABLE_NAME,
    T.RDB$CONSTRAINT_NAME AS PRIMARY_KEY_NAME,
    INDT.RDB$FIELD_NAME AS MASTER_FIELD_NAME
FROM
    RDB$REF_CONSTRAINTS C
    JOIN RDB$RELATION_CONSTRAINTS F ON C.RDB$CONSTRAINT_NAME = F.RDB$CONSTRAINT_NAME
    JOIN RDB$INDEX_SEGMENTS INDF ON INDF.RDB$INDEX_NAME = F.RDB$INDEX_NAME
    JOIN RDB$RELATION_CONSTRAINTS T  ON T.RDB$CONSTRAINT_NAME = C.RDB$CONST_NAME_UQ
    JOIN RDB$INDEX_SEGMENTS INDT ON INDT.RDB$INDEX_NAME = T.RDB$INDEX_NAME
ORDER BY F.RDB$RELATION_NAME, T.RDB$RELATION_NAME 




А это нормально, что запрос иногда возвращает 2 записи?
Или у меня в базе что-то не так со структурой?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT
        T.RDB$RELATION_NAME AS MASTER_TABLE_NAME,
        INDT.RDB$FIELD_NAME AS MASTER_FIELD_NAME
      FROM RDB$REF_CONSTRAINTS C
        JOIN RDB$RELATION_CONSTRAINTS F ON C.RDB$CONSTRAINT_NAME = F.RDB$CONSTRAINT_NAME
        JOIN RDB$INDEX_SEGMENTS INDF ON INDF.RDB$INDEX_NAME = F.RDB$INDEX_NAME
        JOIN RDB$RELATION_CONSTRAINTS T  ON T.RDB$CONSTRAINT_NAME = C.RDB$CONST_NAME_UQ
        JOIN RDB$INDEX_SEGMENTS INDT ON INDT.RDB$INDEX_NAME = T.RDB$INDEX_NAME
      WHERE
        F.RDB$RELATION_NAME = :TABLENAME
      AND
        INDF.RDB$FIELD_NAME = :FNAME



Добавить FIRST 1 не сложно, но не в этом дело.
...
Рейтинг: 0 / 0
Получить имя связанной таблицы - запрос к системным таблицам
    #39665425
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

небольшой фикс, а то забыл что UNIQUE могут картинку портить

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
SELECT
    F.RDB$RELATION_NAME AS DETAIL_TABLE_NAME,
    F.RDB$CONSTRAINT_NAME AS FOREIGN_KEY_NAME,
    INDF.RDB$FIELD_NAME AS DETAIL_FIELD_NAME,
    T.RDB$RELATION_NAME AS MASTER_TABLE_NAME,
    T.RDB$CONSTRAINT_NAME AS PRIMARY_KEY_NAME,
    INDT.RDB$FIELD_NAME AS MASTER_FIELD_NAME
FROM
    RDB$REF_CONSTRAINTS C
    JOIN RDB$RELATION_CONSTRAINTS F ON C.RDB$CONSTRAINT_NAME = F.RDB$CONSTRAINT_NAME
    JOIN RDB$INDEX_SEGMENTS INDF ON INDF.RDB$INDEX_NAME = F.RDB$INDEX_NAME
    JOIN RDB$RELATION_CONSTRAINTS T  ON T.RDB$CONSTRAINT_NAME = C.RDB$CONST_NAME_UQ
    JOIN RDB$INDEX_SEGMENTS INDT ON INDT.RDB$INDEX_NAME = T.RDB$INDEX_NAME
WHERE T.RDB$CONSTRAINT_TYPE = 'PRIMARY KEY'
  AND F.RDB$CONSTRAINT_TYPE = 'FOREIGN KEY'
ORDER BY F.RDB$RELATION_NAME, T.RDB$RELATION_NAME 



ну и если есть ключи в которых более одного поля всё равно дубли будут
...
Рейтинг: 0 / 0
Получить имя связанной таблицы - запрос к системным таблицам
    #39665433
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис> небольшой фикс, а то забыл что UNIQUE могут картинку портить

В запрос и изменения не вникал, но FK можно и на UQ создать, как раз.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Получить имя связанной таблицы - запрос к системным таблицам
    #39665436
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

можно, но я думаю X11 это не надо
...
Рейтинг: 0 / 0
Получить имя связанной таблицы - запрос к системным таблицам
    #39665437
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис
Код: sql
1.
2.
WHERE T.RDB$CONSTRAINT_TYPE = 'PRIMARY KEY'
  AND F.RDB$CONSTRAINT_TYPE = 'FOREIGN KEY'



ДОБАВИЛ, всё равно 2 записи
...
Рейтинг: 0 / 0
Получить имя связанной таблицы - запрос к системным таблицам
    #39665439
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

ну выведи остальные поля и посмотри чем эти 2 записи отличаются
...
Рейтинг: 0 / 0
Получить имя связанной таблицы - запрос к системным таблицам
    #39665441
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обнаружил 2 внешних ключа для одного и того же поля на одну и ту же таблицу.
...
Рейтинг: 0 / 0
Получить имя связанной таблицы - запрос к системным таблицам
    #39665445
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Удалил один внешний ключ.
...
Рейтинг: 0 / 0
Получить имя связанной таблицы - запрос к системным таблицам
    #39665524
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
25.06.2018 16:28, X11 пишет:
> Обнаружил 2 внешних ключа для одного и того же поля на одну и ту же таблицу.

ODS какая?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Получить имя связанной таблицы - запрос к системным таблицам
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]