Получить имена и типы столбцов, сгруппированные по именам столбцов - PullRequest
0 голосов
/ 04 октября 2018

У меня есть база данных IBM DB2.Я хотел бы получить все имена столбцов, типы длины и масштаба, сгруппированные по именам таблиц.

Чтобы получить все таблицы из схемы XYZ:

select name
from SYSIBM.SYSTABLES
where creator = 'XYZ';

Теперь я могу получить описания столбцов для данной таблицы:

SELECT NAME, COLTYPE, LENGTH, SCALE
FROM SYSIBM.SYSCOLUMNS
WHERE TBNAME = 'sometablename'

Я бы хотел сгруппировать это:

SELECT NAME, COLTYPE, LENGTH, SCALE
FROM SYSIBM.SYSCOLUMNS
WHERE TBNAME in (select name from SYSIBM.systables where creator = 'XYZ') 
GROUP BY table_names_from_schema_xyz;

Как это сделать?

Ответы [ 3 ]

0 голосов
/ 04 октября 2018

Группировка (в смысле SQL) имеет смысл только в контексте функций агрегирования.Я подозреваю, что вы ищете вывод, упорядоченный по имени таблицы, а затем по имени столбца, поэтому все столбцы одной таблицы «сгруппированы» вместе.

Этот запрос может работать для вас.

SELECT T.NAME AS TABNAME, C.NAME AS COLNAME, COLTYPE, LENGTH, SCALE
FROM SYSIBM.SYSTABLES T, SYSIBM.SYSCOLUMNS C
WHERE T.NAME = C.TBNAME
AND CREATOR = 'XYZ'
ORDER BY T.NAME, C.NAME;
0 голосов
/ 04 октября 2018

На ваш вопрос можно ответить только из SYSCAT.COLUMNS

select tabname, colname, typename, length, scale   
 from syscat.columns
where tabschema = 'XYZ' 
order by tabname, colno
0 голосов
/ 04 октября 2018

Попробуйте выполнить внутреннее соединение с SYSIBM.systables , вероятно, приведенный ниже пример должен работать

   select c.colname,
            t.tabname as tables, COLTYPE, LENGTH, SCALE
    from SYSIBM.SYSCOLUMNS c
    inner join SYSIBM.systables t on 
          t.tabschema = c.tabschema and t.tabname = c.tabname
    where t.type = 'T'
    and t.tabschema = 'XYZ'

    order by c.colname;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...