2

我目前有 2 个查询(我从互联网上的各个页面获取)执行以下操作:

  • 检索给定表的所有列
  • 检索给定表的 PK 和 FK 约束

这些查询分别是

select 
    c.colname, 
    c.coltype, 
    c.collength
from 
    syscolumns c, 
    systables t
where 
    t.tabname = 'user' and 
    c.tabid = t.tabid

select 
    c.colname, 
    c.colno, 
    o.constrtype 
from 
    systables t,
    sysconstraints o,
    sysindexes i,
    syscolumns c
where 
    t.tabname = 'user' and 
    c.tabid = t.tabid and
    o.tabid = t.tabid and 
    i.tabid = t.tabid and 
    o.constrtype in ('R', 'P') and 
    o.idxname = i.idxname and 
    (   colno = part1 or 
        colno = part2 or 
        colno = part3 or 
        colno = part4 or 
        colno = part5 or 
        colno = part6 or 
        colno = part7 or 
        colno = part8 or 
        colno = part10 or 
        colno = part9 or 
        colno = part11 or 
        colno = part12 or 
        colno = part13 or 
        colno = part14 or 
        colno = part15 or 
        colno = part16 );

我想将这些查询连接在一起,以便结果包含类似 colname, colno, collength, 的内容constrtype。我相信 LEFT OUTER JOIN 是我需要的,但我不太确定如何形成它,所以任何帮助将不胜感激。

4

1 回答 1

5

我对 Informix 的元数据表结构并不十分熟悉,因此我假设您的查询是正确的。

我认为您只想获得完整的列。以下查询应该这样做:

select c.colname, c.colno,   o.constrtype 
from systables t left outer join
     syscolumns c
     on c.tabid = t.tabid left outer join
     sysconstraints o
     on o.tabid = t.tabid left outer join
     sysindexes i
     on i.tabid = t.tabid and
        o.idxname = i.idxname
where t.tabname = 'user' and 
      o.constrtype in ('R', 'P') and 
      colno in (part1, part2, part3, part4, part5, part6, part7, part8, part9, part10,
                part11, part12, part13, part14, part15, part16
               )

我更改了查询以使用现代连接语法。您不应该在from子句中使用逗号。相反,您应该使用显式连接语法。此外,我将比较顺序更改为部分到in语句。最后,我从表格开始,制作所有的连接left outer join

于 2012-11-12T14:34:01.347 回答