2016-06-01 3 views
0

RDB $ Fields 및 RDB $ Relation_Fields를 사용하여 관계별로 그룹화 된 필드의 목록을 가져 오려고했습니다. SQL은 다음과 같습니다여러 테이블에서 고유 선택

select distinct 
     RDB$relation_Fields.RDB$relation_name as "Relation Name" , 
     RDB$relation_Fields.RDB$field_name as "Field Name " , 
     (select RDB$Fields.RDB$Field_Type  as "Field Type" 
      from RDB$Fields 
      where RDB$Fields.rdb$Field_Name = 
       RDB$relation_Fields.RDB$Field_Name) 
from 
    RDB$fields   , 
    RDB$relation_Fields 
where 
       RDB$relation_Fields.RDB$relation_name = 'Database_Table'  and 
    substring (     RDB$relation_name from 1 for 4) <> 'IDE$' and 
    substring (     RDB$relation_name from 1 for 4) <> 'MON$'     substring (     RDB$relation_name from 1 for 4) <> 'RDB$' 
    order by 
          RDB$relation_name, 
          RDB$relation_Fields.rdb$field_name 

내가 대신

Relation Name Field Name Field Type 
    ------------- ---------- ---------- 
    Database_Table Field1  TypeX 
    Database_Table Field2  TypeY 
    ...   ...  ... 

을 얻어야한다, 나는 나에게 올바른 SQL을 제시해주십시오

Relation Name Field Name Field Type 
    ------------- ---------- ---------- 
    Database_Table Field1  <null> 
    Database_Table Field2  <null> 
    ...   ...  <null> 

을 얻고있다.

답변

3

먼저 표를 결합해야합니다. 그렇지 않으면 교차 결합 결과가 표시됩니다.

또한 테이블이 이미 조인되고 있으므로 조인 조건을 추가한다고 가정 할 때 fieldtype 열에 상관 된 하위 쿼리가 필요하지 않습니다. Thorsten의 설명을 기반으로 추가했습니다.

select rf.RDB$relation_name as "Relation Name" , 
     rf.RDB$field_name as "Field Name " , 
     f.RDB$Field_Type  as "Field Type" 
from RDB$fields f 
JOIN RDB$relation_Fields rf on f.RDB$FIELD_NAME = rf.RDB$FIELD_SOURCE 
where rf.RDB$relation_name = 'Database_Table'     
and substring (rf.RDB$relation_name from 1 for 4) not in ('IDE$','MON$','RDB$') 
order by rf.RDB$relation_name, rf.RDB$field_name 
+1

아주 좋은 대답입니다. ('IDE $', 'MON $' 'RDB $')'가 아닌'substring (rf.RDB $ relation_name from 1 to 4) '로이 질의를 단축 할 수있다. –

+0

BTW : ON 절은 아마도 여기에 보이는'ON f.RDB $ FIELD_NAME = rf.RDB $ FIELD_SOURCE' 일 것입니다 : http://www.firebirdsql.org/file/community/conference-2014/pdf/22_tips_firebird_system_tables.pdf –

+0

모두에게 감사합니다 (답변 및 의견)! 조인은 그 차이를 만들었습니다. Thorsten 주석 1은 매우 유용하며 주석 2는 근본적입니다. – user2383818

관련 문제