管理人Kのひとりごと

デジモノレビューやプログラミングや写真など

特定の列名を持つテーブルを検索する(sqlite3)

特定の列名を持つテーブルを検索したい時の方法のsqlite3版。
Oracle,SQLServer編は以下に記載済み。

テーブルの一覧は取得できるものの...

sqlite3では、「sqlite_master」テーブルを検索することで、テーブルの一覧は取得できるものの、その中に含まれるカラムのみを検索する仕組みはないようです。
https://www.sqlite.org/faq.html#q7

どうにかこうにか、検索する方法

上述の「sqlite_master」テーブルから、テーブル作成のDDL文を取得できるので、その中にお目当てのカラム名が含まれるかを検索することで、特定の列名を持つテーブルを絞り込めそうです。

SELECT
    TBL_NAME
    ,SQL
FROM
    SQLITE_MASTER
WHERE
    TYPE='TABLE'
    AND SQL LIKE '%NAME%'
;

使用例

-- テーブルの作成
create table test_table(
ID integer
, NAME text
, ADDRESS text
);

create table test_table2(
BANGO integer
, NAMAE text
, JUSHO text
);

-- 「name(NAME)」を含むテーブルの検索
sqlite> select tbl_name,sql from sqlite_master where type='table' and sql like '%name%';
test_table|CREATE TABLE test_table(
ID integer
, NAME text
, ADDRESS text
)

-- カラム名以外も検索対象となるため、意図しない結果になってしまうことも...
sqlite> select tbl_name,sql from sqlite_master where type='table' and sql like '%int%';
test_table|CREATE TABLE test_table(
ID integer
, NAME text
, ADDRESS text
)
test_table2|CREATE TABLE test_table2(
BANGO integer
, NAMAE text
, JUSHO text
)