Search code examples
sqldb2db2-luw

DB2 query table from SQL result


I want to query tables from schema which have certain columns. But I not know how to define the query

SELECT NAME_1, NAME_2
(SELECT C.TABNAME AS TB_NAME
FROM SYSCAT.COLUMNS C
INNER JOIN SYSCAT.TABLES T ON T.TABSCHEMA = C.TABSCHEMA AND T.TABNAME = C.TABNAME
WHERE T.TYPE = 'T'
AND C.TABSCHEMA = 'MYSCHEMA'
AND C.COLNAME = 'NAME_1'
INTERSECT
SELECT C.TABNAME AS TB_NAME
FROM SYSCAT.COLUMNS C
INNER JOIN SYSCAT.TABLES T ON T.TABSCHEMA = C.TABSCHEMA AND T.TABNAME = C.TABNAME
WHERE T.TYPE = 'T'
AND C.TABSCHEMA = 'MYSCHEMA'
AND C.COLNAME = 'NAME_2'
)

Solution

  • If the question is about getting a list of tables containing all column names specified, then it would be:

    WITH V(COLNAME) AS (VALUES 
      'TBNAME'
    , 'NAME'
    , 'TBCREATOR'
    )
    SELECT T.TABNAME
    FROM SYSCAT.TABLES T
    JOIN SYSCAT.COLUMNS C ON (C.TABSCHEMA, C.TABNAME) = (T.TABSCHEMA, T.TABNAME)
    JOIN V ON V.COLNAME = C.COLNAME
    WHERE T.TYPE = 'T' AND T.TABSCHEMA = 'SYSIBM'
    GROUP BY T.TABNAME
    HAVING COUNT(1) = (SELECT COUNT(1) FROM V)
    

    The result is:

    TABNAME
    SYSCHECKS
    SYSCOLUMNS
    SYSINDEXES
    SYSTABCONST
    SYSTRIGGERS

    If you need something else, then, please, edit your question with exact description of "I want to query tables".