2016-06-01 10 views
0

RDB $ FieldsとRDB $ Relation_Fieldsを使用して、リレーションでグループ化されたフィールドのリストを取得しようとしています。 SQLは、次のとおりです。複数のテーブルでdistinctを選択

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

まず、テーブルを結合する必要があります。それ以外の場合はクロス結合結果が得られます。

また、テーブルがすでにジョインされているため(ジョイント条件を追加すると仮定すると、Thorstenのコメントに基づいて追加されているため)、fieldtypeカラムに相関サブクエリは必要ありません。

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

目次: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