0

SYSIBM.SYSCOLUMNSDB2 を使用しているときに、1 つのテーブルにしか表示されない奇妙な動作に気付きました。

これは私のクエリです:

select distinct NAME, COLTYPE, LENGTH, SCALE, REMARKS from SYSIBM.SYSCOLUMNS where  TBNAME='Table1';

通常、結果にはすべてのテーブルが 1 回表示されます。

|===================================|
| NAME |COLTYPE|LENGTH|SCALE|REMARKS|
|col1  | ..... |......|.....|.......|
|col2  | ..... |......|.....|.......|
|col3  | ..... |......|.....|.......|
|===================================|

しかし、特定のテーブルを 1 つ使用すると、それを と呼びましょうTable2。すべての列が 2 回表示されます。

|===================================|
| NAME |COLTYPE|LENGTH|SCALE|REMARKS|
|col1  | ..... |......|.....|.......|
|col1  | ..... |......|.....|.......|
|col2  | ..... |......|.....|.......|
|col2  | ..... |......|.....|.......|
|col3  | ..... |......|.....|.......|
|col3  | ..... |......|.....|.......|
|===================================|

ただしREMARKS、選択ステートメントにを含めた場合のみ。を選択から削除するとREMARKS、すべてが期待どおりに機能します。

その問題の原因は何ですか?クエリに何か問題がありますか?

4

2 に答える 2

5

スキーマを考慮していません。スキーマ A とスキーマ B に table2 が存在する可能性があります。

LUW:

個人的には、カタログを照会するために syscat スキーマをお勧めします。sysibm は DB2 の内部にあり、これらのテーブルはバージョン間で変更される可能性があります。

select TABSCHEMA, TABNAME, COLNAME, TYPENAME, LENGTH, SCALEREMARKS
from syscat.columns
where tabname = 'TABLE2'
于 2015-09-09T13:35:22.860 に答える