2016-12-04 6 views
0

SQLite 3では、SQLを構築したいと思います(そうでなければ、基本的なSQLiteStudioのインストールで実行できる限り)指定されたdb内のすべてのテーブルから読み込み可能なフィールドと、それらのフィールドと、それらのテーブルに(名前に基づいて)表示される回数をリストします。DB内のすべてのフィールドとその表示頻度 - SQLite 3

例:

まずテーブル:パーソン

フィールド:

  1. PERSONID

第二表:住所

フィールド:

  1. PERSONID

  2. ストリート

コードを実行した後、私は、このようなように、例えば、fields_listと呼ばれる第3のテーブルを持っていると思います。

欄:/

PERSONID/2

姓/ 1

姓/ 1

ストリート/ 1

任意のアイデア? 私は純粋なSQLと大丈夫ですが、このようなテーブル自体をループすることは、私が恐れることの上にあります。

ありがとうございました!

アンドレ

+0

これは、純粋なSQLでは不可能です。 SQLiteは、実際のプログラミング言語と一緒に使用するための組み込みデータベースです。 –

答えて

0

これは少しのスクリプトで行うことができます。私のデータベース構造が次のようになっているとします。

CREATE TABLE a (personID text, name text); 
CREATE TABLE b (personID text, address text); 

次のシェルコマンドは、列名をcountで集計します(fooを置き換えます)。データベースファイルとsqliteの):

出力を与える
sqlite3 foo.sqlite "select name from sqlite_master where type = 'table'" | while read tableName; do sqlite3 foo.sqlite "pragma table_info($tableName)"; done | awk -F\| '{print $2}' | sort | uniq -c 

:ここ

1 address 
    1 name 
    2 personID 

は、それが何をしているかのステップブレークダウンバイステップです:

は、すべてのテーブルの名前を印刷 - 1行に1つの

sqlite3 foo.sqlite "select name from sqlite_master where type = 'table'" 

Output 
a 
b 

各テーブル名を読み、そしてトンをプリントアウトするPRAGMA table_name()を実行します可能スキーマ:

while read tableName; do sqlite3 foo.sqlite "pragma table_info($tableName)"; done 

Output 
0|personID|text|0||0 
1|name|text|0||0 
0|personID|text|0||0 
1|address|text|0||0 

区切り文字として使用| 2列つかむ:

sort 

Output 
address 
name 
personID 
personID 

ユニークな結果をマージ、および-Cのカウントを表示する:結果は

awk -F\| '{print $2}' 

Output 
personID 
name 
personID 
address 

ソート何個のアイテムが出現したか

uniq -c 

Output 
    1 address 
    1 name 
    2 personID 
関連する問題