SELECT isg2.RDB$FIELD_NAME FirstField , rc2.RDB$RELATION_NAME NetTable , isg4.RDB$FIELD_NAME SecondField , rc5.RDB$RELATION_NAME TargetTable , isg6.RDB$FIELD_NAME TargetField , (SELECT 1 FROM RDB$DATABASE WHERE EXISTS(SELECT * FROM RDB$RELATION_FIELDS rf WHERE rc5.RDB$RELATION_NAME = rf.RDB$RELATION_NAME AND rf.RDB$FIELD_NAME = 'LB') AND EXISTS(SELECT * FROM RDB$RELATION_FIELDS rf WHERE rc5.RDB$RELATION_NAME = rf.RDB$RELATION_NAME AND rf.RDB$FIELD_NAME = 'RB')) IsTree FROM RDB$INDEX_SEGMENTS isg1 , RDB$RELATION_CONSTRAINTS rc1 , RDB$REF_CONSTRAINTS rfc1 , RDB$RELATION_CONSTRAINTS rc2 , RDB$INDEX_SEGMENTS isg2 , RDB$INDEX_SEGMENTS isg3 , RDB$RELATION_CONSTRAINTS rc3 , RDB$INDEX_SEGMENTS isg4 , RDB$INDEX_SEGMENTS isg5 , RDB$RELATION_CONSTRAINTS rc4 , RDB$REF_CONSTRAINTS rfc2 , RDB$RELATION_CONSTRAINTS rc5 , RDB$INDEX_SEGMENTS isg6 WHERE rc1.RDB$RELATION_NAME = :tablename AND rc1.RDB$INDEX_NAME = isg1.RDB$INDEX_NAME AND rc1.RDB$CONSTRAINT_TYPE = 'PRIMARY KEY' AND rfc1.RDB$CONSTRAINT_NAME = rc2.RDB$CONSTRAINT_NAME AND rfc1.RDB$CONST_NAME_UQ = rc1.RDB$CONSTRAINT_NAME AND rc2.RDB$INDEX_NAME = isg2.RDB$INDEX_NAME AND rc1.RDB$RELATION_NAME <> rc2.RDB$RELATION_NAME AND isg3.RDB$FIELD_NAME = isg2.RDB$FIELD_NAME AND rc3.RDB$RELATION_NAME = rc2.RDB$RELATION_NAME AND rc3.RDB$CONSTRAINT_TYPE = 'PRIMARY KEY' AND rc3.RDB$INDEX_NAME = isg3.RDB$INDEX_NAME AND isg4.RDB$INDEX_NAME = isg3.RDB$INDEX_NAME AND isg2.RDB$FIELD_NAME <> isg4.RDB$FIELD_NAME AND isg5.RDB$FIELD_NAME = isg4.RDB$FIELD_NAME AND rc4.RDB$INDEX_NAME = isg5.RDB$INDEX_NAME AND rc4.RDB$CONSTRAINT_TYPE = 'FOREIGN KEY' AND rc4.RDB$RELATION_NAME = rc2.RDB$RELATION_NAME AND rfc2.RDB$CONSTRAINT_NAME = rc4.RDB$CONSTRAINT_NAME AND rfc2.RDB$CONST_NAME_UQ = rc5.RDB$CONSTRAINT_NAME AND rc5.RDB$INDEX_NAME = isg6.RDB$INDEX_NAMEВозвращает список атрибутов типа множество для заданной таблицы.
16 июн. 2010 г.
Неявные JOIN-ы
Такие вот запросы практиковались в раннем Гедымине:
Labels:
SQL
Комментариев нет:
Отправить комментарий