在informix中加入查询

时间:2012-11-12 12:03:57

标签: sql database join informix

我目前有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 );

我想将这些查询连接在一起,以便结果包含类似的内容 colnamecolnocollengthconstrtype。我相信LEFT OUTER JOIN是我需要的,但我不太清楚如何形成它所以任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分: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 s。