查询以选择具有特定最后一列的所有表 Ibm Db2 z/os

Posted

技术标签:

【中文标题】查询以选择具有特定最后一列的所有表 Ibm Db2 z/os【英文标题】:Query to select all tables with specific last column Ibm Db2 z/os 【发布时间】:2021-05-10 16:57:36 【问题描述】:

目标:我需要创建一个查询来选择具有特定最后一列 Ibm Db2 z/os 的所有表

所以我知道我需要为此更改 where 子句,但我非常想选择架构中最后一列作为 BATCH_ID 的所有表。我已经尝试过基于长度的 where 子句,但也无法弄清楚我知道 mysql 有一个序数位置功能,但据我所见,这不在 IBM DB2 z/Os 中。任何帮助将不胜感激。

select c.tabschema as schema_name,
       c.tabname as table_name
from syscat.columns c
inner join syscat.tables t on 
      t.tabschema = c.tabschema and t.tabname = c.tabname
where c.colname = 'BATCH_ID' AND c.tabschema = 'WRIT5P1'
AND c.tabname not like 'OLD%'
and t.type = 'T'
order by schema_name, table_name; 

【问题讨论】:

【参考方案1】:

SYSIBM.SYSTABLESSYSIBM.SYSCOLUMNS

SELECT T.NAME AS TABLE_NAME
FROM SYSIBM.SYSTABLES T
JOIN SYSIBM.SYSCOLUMNS C ON C.TBNAME = T.NAME AND C.TBCREATOR = T.CREATOR
WHERE T.TYPE = 'T' AND T.CREATOR = 'WRIT5P1'
AND T.NAME NOT LIKE 'OLD%'
AND C.NAME = 'BATCH_ID'
AND C.COLNO = T.COLCOUNT

我不记得 C.COLNO 是从 0 开始还是从 1 开始。如果它从 0 开始,请相应地编辑查询。

【讨论】:

嗯,这似乎不起作用,我应该把 COLNO = 0 放在哪里,因为那是 ibm db2 z/OS 的列开始的地方? C.COLNO + 1 = T.COLCOUNT 而不是C.COLNO = T.COLCOUNT 太好了,谢谢@Mark Ba​​rinstein

以上是关于查询以选择具有特定最后一列的所有表 Ibm Db2 z/os的主要内容,如果未能解决你的问题,请参考以下文章

MySql 选择具有多个特定列的所有表

DB2 中的递归查询以获取链中的所有项目

Laravel - 查询构建器以选择具有唯一列值的多行(具有另一列的最大值)

查询以返回在所有行中对于一列的每个不同值具有相同值的行值

在 ibm db2 上的游标中立即执行

查找另一列具有不同列的重复项