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に、これらのクエリを結合したいと思い ます。LEFT OUTER JOIN が必要なものだと思いますが、それを形成する方法がよくわからないので、助けていただければ幸いです。colnocollengthconstrtype

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 に答える