特定の列名が存在する(しない)テーブルの一覧を表示するSQL(Oracle版)
概要
Oracleで特定の列名が存在するテーブル(しない)の一覧を表示するSQL
方法
以下で取得可能と思われる。。。
TESTスキーマ内の列名COL1が存在するテーブルを抽出
SELECT TABLE_NAME FROM DBA_TABLES A WHERE OWNER='TEST' AND EXISTS(SELECT 'X' FROM DBA_TAB_COLUMNS B WHERE A.OWNER=B.OWNER AND A.TABLE_NAME=B.TABLE_NAME AND B.COLUMN_NAME='COL1' )
TESTスキーマ内の列名COL1が存在しないテーブルの一覧の抽出
SELECT TABLE_NAME FROM DBA_TABLES A WHERE OWNER='TEST' AND NOT EXISTS(SELECT 'X' FROM DBA_TAB_COLUMNS B WHERE A.OWNER=B.OWNER AND A.TABLE_NAME=B.TABLE_NAME AND B.COLUMN_NAME='COL1' )
確認
テーブル定義
SQL> desc test1 名前 NULL? 型 ----------------------------------------- -------- ---------------------------- COL1 NUMBER SQL> desc test2 名前 NULL? 型 ----------------------------------------- -------- ---------------------------- COL1 NUMBER COL2 NUMBER COL3 NUMBER SQL> desc test3 名前 NULL? 型 ----------------------------------------- -------- ---------------------------- COL2 NUMBER SQL> desc test4 名前 NULL? 型 ----------------------------------------- -------- ---------------------------- COL2 NUMBER COL3 NUMBER COL4 NUMBER SQL> desc test5 名前 NULL? 型 ----------------------------------------- -------- ---------------------------- COL1 VARCHAR2(10) COL2 VARCHAR2(10) SQL> desc test6 名前 NULL? 型 ----------------------------------------- -------- ---------------------------- COL2 VARCHAR2(10) COL3 VARCHAR2(10) SQL>
実行結果
SQL> SELECT TABLE_NAME FROM DBA_TABLES A WHERE OWNER='TEST' 2 AND EXISTS(SELECT 'X' FROM DBA_TAB_COLUMNS B WHERE 3 A.OWNER=B.OWNER AND A.TABLE_NAME=B.TABLE_NAME AND B.COLUMN_NAME='COL1' 4 ) 5 ; TABLE_NAME -------------------------------------------------------------------------------- TEST1 TEST2 TEST5 SQL> SELECT TABLE_NAME FROM DBA_TABLES A WHERE OWNER='TEST' 2 AND NOT EXISTS(SELECT 'X' FROM DBA_TAB_COLUMNS B WHERE 3 A.OWNER=B.OWNER AND A.TABLE_NAME=B.TABLE_NAME AND B.COLUMN_NAME='COL1' 4 ); TABLE_NAME -------------------------------------------------------------------------------- TEST3 TEST4 TEST6