8

簡単な SQL の質問があります。3列のデータベースを作成したいのですが、次のコードがあります:

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

2 つの列 (prideID と pubmedID) を含む単純な csv ファイルをインポートしようとすると、"expected 3 columns of data but found 2" エラーが発生します。t1key を整数にして、新しいフィールドが追加されると自動的にカウントアップするようにします。これを機能させるには、PRIMARY KEY の前に NOT NULL を配置する必要がありますか?

4

3 に答える 3

20

.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のエイリアスとして扱われるためです。これは常に一意の昇順の番号です。

于 2010-07-15T23:48:00.460 に答える
1

insert使用する代わりに

create table newtable as select  * from  footmp;

それはより良く、より迅速です。

于 2014-05-31T18:27:44.147 に答える