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'
)
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".