2012-11-12 79 views
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); 

我想,这样的结果包含有类似 colnamecolnocollengthconstrtype加入这些查询在一起。我相信LEFT OUTER JOIN是我需要的,但我不太清楚如何形成它,所以任何帮助,将不胜感激。

回答

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。