PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum Informações detalhadas Constraints #60469

10/02/2009

0

Olá, tudo bem?
Peguei um select na internet que busca informações detalhadas sobre as constraints de determinada tabela. Segue:

SELECT rc.RDB$CONSTRAINT_NAME,
          s.RDB$FIELD_NAME AS field_name,
          rc.RDB$CONSTRAINT_TYPE AS constraint_type,
          i.RDB$DESCRIPTION AS description,
          rc.RDB$DEFERRABLE AS is_deferrable,
          rc.RDB$INITIALLY_DEFERRED AS is_deferred,
          refc.RDB$UPDATE_RULE AS on_update,
          refc.RDB$DELETE_RULE AS on_delete,
          refc.RDB$MATCH_OPTION AS match_type,
          i2.RDB$RELATION_NAME AS references_table,
          s2.RDB$FIELD_NAME AS references_field
     FROM RDB$INDEX_SEGMENTS s
LEFT JOIN RDB$INDICES i ON i.RDB$INDEX_NAME = s.RDB$INDEX_NAME
LEFT JOIN RDB$RELATION_CONSTRAINTS rc ON rc.RDB$INDEX_NAME = s.RDB$INDEX_NAME
LEFT JOIN RDB$REF_CONSTRAINTS refc ON rc.RDB$CONSTRAINT_NAME = refc.RDB$CONSTRAINT_NAME
LEFT JOIN RDB$RELATION_CONSTRAINTS rc2 ON rc2.RDB$CONSTRAINT_NAME = refc.RDB$CONST_NAME_UQ
LEFT JOIN RDB$INDICES i2 ON i2.RDB$INDEX_NAME = rc2.RDB$INDEX_NAME
    WHERE i.RDB$RELATION_NAME=´GMC_PARAMETRO_PRECO´       -- table name
      and rc.RDB$CONSTRAINT_TYPE = ´FOREIGN KEY´
      AND d1.RDB$DEPENDED_ON_NAME <> d2.RDB$DEPENDED_ON_NAME
      AND d1.RDB$FIELD_NAME <> d2.RDB$FIELD_NAME
 ORDER BY s.RDB$FIELD_POSITION


O problema é que ele está duplicando alguns registros. Alguém sabe porque ou tem algum select que faça a mesma coisa mas que não duplique os resultados?

Obrigado.


Woinch

Woinch

Responder

Posts

11/02/2009

Woinch

Descobri o problema.

Alterar:
LEFT JOIN RDB$INDICES i2 ON i2.RDB$INDEX_NAME = rc2.RDB$INDEX_NAME 


Para:
   left join RDB$INDEX_SEGMENTS s2 on (i2.RDB$INDEX_NAME = s2.RDB$INDEX_NAME and               
                                       s2.RDB$FIELD_POSITION = s.RDB$FIELD_POSITION)


Obrigado.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar