Select 与多个表不同

Select distinct with multiple tables

我试图使用 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
    ...           ...        ...

相反,我得到

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

请告诉我正确的 SQL。

首先,需要连接表。否则你会得到一个交叉连接的结果。

此外,您不需要字段类型列的相关子查询,因为表已经被联接(假设您添加了联接条件——我根据 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