質問

私は簡単なSQLの質問があります。私は3列のデータベースを作りたいと思います、そして私は次のコードを持っています:

sqlite3 meshdb.db "create table t1 (t1key INTEGER PRIMARY KEY, prideID, pubmedID);"

2つの列(prideIDとpubmedID)を持つ単純なcsvファイルをインポートしようとすると、「データの3列が予想されますが、2が見つかりました」というエラーが表示されます。私はt1keyを整数にし、新しいフィールドが追加されると自動的にカウントアップします。これを機能させるには、主キーの前にNOT NULLを配置する必要がありますか?

役に立ちましたか?

解決

.import 入力の整形はサポートされていません(セパレータの設定を除く)。CSVファイルを一時テーブルにインポートし、それを実際のテーブルに挿入する必要があります。セッションの例を次に示します:

$ cat a.csv 
1,2
3,4
5,6
$ sqlite3 a.db
SQLite version 3.6.23.1
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table foo(id integer primary key,x,y);
sqlite> create temp table footmp(x,y);
sqlite> .separator ,
sqlite> .import a.csv footmp
sqlite> select * from footmp;
1,2
3,4
5,6
sqlite> insert into foo(x,y) select * from footmp; 
sqlite> select * from foo; 
1,1,2
2,3,4
3,5,6
sqlite> drop table footmp; 

IDがカウントアップされていることがわかります。これは、INTEGER PRIMARY KEY型の列が内部ROWIDの別名として扱われ、常に一意の昇順の数値であるためです。

他のヒント

insertの代わりに

create table newtable as select  * from  footmp;
.

それはより早くより速いです。

SQLiteの変換( SQLite 3.7.15.2 2013-01-09 )私が最初に一時テーブルにインポートする必要はありません。私がしたのは、インポートを開始する前に区切り文字を設定してください。各行のID値を指定したので、CSVの最初の列は一意の整数のセットでした

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top