4831
現在DBに二つのテーブルがあり、その二つのテーブルにはそれぞれ`text`というカラムがあります。その二つの`text`カラムのデータを取得してとりあえずログに表示させようとしているのですが、次のようなエラーが出てきてしまいます。

```

    no such column: text (code 1): , while compiling: SELECT text FROM sqlite_master WHERE type = 'table'
    
```

`sqlite_master`というようなものがあるということを先ほど知ったのですが、そもそもこれを使えば僕がやりたいような「全テーブル内で、指定したカラムのデータの取得」ということができるのでしょうか？以下に現在のコードを記します。間違いがあれば指摘していただけるとありがたいです。すみませんが、宜しくお願いします。

```

            Cursor cursor = MyDB.db.rawQuery("SELECT text FROM sqlite_master WHERE type = 'table'", null);
            while (cursor.moveToNext()) {
                Log.v("--->", cursor.getString(cursor.getColumnIndex("text")));
            }
    
```
CC BY-SA 3.0
2015-01-19T06:24:44.797
4829
2015-01-19T06:56:25.953
5210
question
android sqlite
sqlite_masterの使い方
[`SQLLITE_MASTER`](http://www.sqlite.org/faq.html#q7)
は、DBに含まれるスキーマ情報を含んでいるだけで、全てのデータを保持しているわけではありません。以下の SQL で、テーブルのDDLを得られる類のものです。

```

    SELECT name FROM sqlite_master WHERE type='table';
    
```

目的のためには、テーブル名を得たうえで、ここはオーソドックスに、 `union` でいいのではないでしょうか。

```

    // Scheme
    CREATE TABLE table1 ( id int, text varchar);
    CREATE TABLE table2 ( id int, text varchar);
    INSERT INTO table1 (id, text) values ( 1, "table1-1");
    INSERT INTO table1 (id, text) values ( 2, "table1-2");
    INSERT INTO table1 (id, text) values ( 3, "table1-3");
    INSERT INTO table1 (id, text) values ( 4, "table1-4");
    INSERT INTO table1 (id, text) values ( 5, "table1-5");
    INSERT INTO table2 (id, text) values ( 1, "table2-1");
    INSERT INTO table2 (id, text) values ( 2, "table2-2");
    INSERT INTO table2 (id, text) values ( 3, "table2-3");
    INSERT INTO table2 (id, text) values ( 4, "table2-4");
    INSERT INTO table2 (id, text) values ( 5, "table2-5");
    
    // DB Scheme
    select id, text from (
      select id, text from table1
      union
      select id, text from table2
    ) where text like "%-3";
    
```

Result:

``id``text`  
`3 ``table1-3`  
`3 ``table2-3``

追加ですが、テーブルのカラム名を列挙するのには、

```

    db.rawQuery("pragma table_info(" + table_name + ")", null);
    
```

が使えるので。組み合わせると遠回りですが実現できそうですね。
CC BY-SA 3.0
2015-01-19T06:51:18.497
4831
2015-01-19T06:56:25.953
2015-01-19T06:56:25.953
4978
4978
4829
answer