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

SYSIBM.SYSCOLUMNS query shows columns twice if using REMARKS

我在使用 DB2 和 SYSIBM.SYSCOLUMNS 时注意到一个奇怪的行为,它只出现在一个 table 中。

这是我的查询:

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

通常结果显示每个 table 一次。

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

但如果我使用一个特定的 table,我们称它为 Table2,每列显示两次:

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

但前提是我在 select 语句中包含 REMARKS。如果我从 select 中删除 REMARKS,一切都会按预期进行。

导致该问题的原因可能是什么?我的查询有问题吗?

每行的备注栏中有什么?

您的原始查询中有一个 DISTINCT。由于您只选择 table 名称,是否有可能在多个模式中具有相同的 table;一个有备注,一个没有?

您没有考虑架构。模式 A 和模式 B 中可能存在表 2。

在卢维:

就个人而言,我推荐使用 syscat 模式来查询目录。 sysibm 是 DB2 内部的,这些表可能会在版本之间发生变化。

select TABSCHEMA, TABNAME, COLNAME, TYPENAME, LENGTH, SCALEREMARKS
from syscat.columns
where tabname = 'TABLE2'