如果使用REMARKS,SYSIBM.SYSCOLUMNS查询将显示两次列

Chr*_*örz 0 db2 select system-tables

我在使用DB2时发现了一个奇怪的行为,SYSIBM.SYSCOLUMNS而且只出现在一个表中.

这是我的查询:

select distinct NAME, COLTYPE, LENGTH, SCALE, REMARKS from SYSIBM.SYSCOLUMNS where  TBNAME='Table1';
Run Code Online (Sandbox Code Playgroud)

通常结果显示每个表一次.

|===================================|
| NAME |COLTYPE|LENGTH|SCALE|REMARKS|
|col1  | ..... |......|.....|.......|
|col2  | ..... |......|.....|.......|
|col3  | ..... |......|.....|.......|
|===================================|
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用一个特定的表,让我们调用它Table2,每列显示两次:

|===================================|
| NAME |COLTYPE|LENGTH|SCALE|REMARKS|
|col1  | ..... |......|.....|.......|
|col1  | ..... |......|.....|.......|
|col2  | ..... |......|.....|.......|
|col2  | ..... |......|.....|.......|
|col3  | ..... |......|.....|.......|
|col3  | ..... |......|.....|.......|
|===================================|
Run Code Online (Sandbox Code Playgroud)

但是只有我REMARKS在select语句中包含它.如果我REMARKS从我的选择中删除,一切都按预期工作.

这个问题可能是什么原因?我的查询有问题吗?

Ang*_*ocA 5

你没有考虑过模式.模式A和模式B中可能有table2.

在LUW:

就个人而言,我建议使用syscat架构来查询目录.sysibm是DB2的内部,这些表可以在不同版本之间进行更改.

select TABSCHEMA, TABNAME, COLNAME, TYPENAME, LENGTH, SCALEREMARKS
from syscat.columns
where tabname = 'TABLE2'
Run Code Online (Sandbox Code Playgroud)