Явный JOIN 4-х таблиц

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 26 янв 2006, 14:16

сначала
Если мое предположение неправильно, ткните носом, только не в langref.pdf.
а потом
Ты мне скажи, мог сразу подсказать:
смотри langref.pdf таблица такая-то и такая-то.
Если я непонятно вопрос задал, так бы и сказали, вопросы наводящие бы задали.
тебе и давали наводящие ответы.
А Вы господа, не только ПРОФИ и саппорта и ФБ, но и хамы приличные. Нестыдно Уважаемые? Я к Вам как настоящим ПРОФИ обратился, ну невнимательно langref читал, а вы.....
здесь не платный саппорт (и даже не бесплатный) - это просто форум. И здесь никто никому ничего не должен. Тебе сразу показали на ошибку, и вместо того чтобы попытаться ее исправить, ты затеял то, что мы тут видим.

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 26 янв 2006, 14:38

GByte писал(а):А Вы господа, не только ПРОФИ и саппорта и ФБ, но и хамы приличные. Нестыдно Уважаемые? Я к Вам как настоящим ПРОФИ обратился, ну невнимательно langref читал, а вы.....

Всего Вам доброго!
Если ты считаешь, что обращение на Вы и вежливый тон есть признак отсутствия хамства или большой культуры, то вынужден тебя огорчить - это далеко не так. А вот игнорирование обязательной к прочтению литературы, тупой спор с заведомо более опытными и обвинение тех, кто тебе уже помог, в нежелании вытирать сопли - это таки да, хамство
GByte писал(а):ПС
на месте КДВ я бы сложил с себя полномочия Модератора или минимум на вопросы перестал отвечать.
А давай я приду к тебе домой, грязными руками полезу в холодильник и посоветую хозяину сложить с себя полномочия ?

GByte
Сообщения: 29
Зарегистрирован: 19 янв 2006, 11:31

Сообщение GByte » 26 янв 2006, 14:40

KDV, на платный/бесплатный саппорт я и не надеялся - вопросы к Мэрэлин[у].

Про лэнгреф:
Могли бы и настоять, а я только сказал, что я его (лэнгреф) прочитал (насколько практика покажет).

Про наводящие ответы:
Почтение Мопасана, уже кому-нить помогло?

Надеюсь администрация форума сделает выводы.


Всего наилучшего.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 26 янв 2006, 15:03

администрация форума - это я.

Как там с запросом - получилось, или нет?

GByte
Сообщения: 29
Зарегистрирован: 19 янв 2006, 11:31

Сообщение GByte » 26 янв 2006, 15:08

Про админстрацию я в курсе.

С запросом пока нет - немогу понять схему звязи системных таблиц, перечитываю лэнгреф.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 26 янв 2006, 16:06

давай еще раз:

в rdb$relation_fields хранятся столбцы таблицы и порядковый номер столбца в таблице.

в rdb$indices хранятся индексы для таблицы, каждый индекс имеет свой порядковый номер (относительно таблицы).

в rdb$index_segments хранятся проиндексированные столбцы. Каждый столбец имеет порядковый номер в индексе.

то есть: relation_fields объединяется с indices по rdb$relation_name, а indices и index_segments - по rdb$index_name. relation_fields с index_segments - по rdb$field_name. Все.

GByte
Сообщения: 29
Зарегистрирован: 19 янв 2006, 11:31

Сообщение GByte » 27 янв 2006, 12:58

Вот вроде сделал.
Ошибкой было - пропустил поле RDB$INDEX_SEGMENTS.RDB$FIELD_NAME.

Код: Выделить всё

SELECT
    I1.RDB$RELATION_NAME TABLE_NAME,
    IS1.RDB$FIELD_NAME FIELD_NAME,
    I2.rdb$relation_name TABLE_NAME2,
    IS2.rdb$field_name FIELD_NAME2
FROM
    RDB$INDICES I1,
    RDB$INDEX_SEGMENTS IS1,
    rdb$indices I2,
    RDB$INDEX_SEGMENTS IS2
WHERE
    (I1.RDB$FOREIGN_KEY <> '')
    and
    (I1.RDB$INDEX_NAME = IS1.RDB$INDEX_NAME)
    and
    (I2.rdb$index_name = I1.rdb$FOREIGN_KEY)
    and
    (IS2.RDB$INDEX_NAME = I1.rdb$FOREIGN_KEY)
;
Спасибо, КДВ, за понимание!

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 27 янв 2006, 13:29

Вроде правильно, если ты хотел найти что куда ссылается.

Если тебе нужны:
таблица, индекс и его столбцы, то

Код: Выделить всё

select
rf.rdb$relation_name TABLE_NAME,
i.rdb$index_name INDEX_NAME,
is1.rdb$field_position IDX_FIELD_NO,
rf.rdb$field_name FIELD_NAME,
rf.rdb$field_position TBL_FIELD_NO
from
rdb$relation_fields rf, rdb$indices i, rdb$index_segments is1
where
 rf.rdb$relation_name = i.rdb$relation_name and
 i.rdb$index_name = is1.rdb$index_name and
 rf.rdb$field_name = is1.rdb$field_name and
 rf.rdb$relation_name not starting with 'RDB$'
order by 1, 2, 3

Ответить