0

これは機能します:

sqlite> .databases
seq  name             file                                                      
---  ---------------  ----------------------------------------------------------
0    main             /path/to/db
2    uni              /path/to/db

これも:

sqlite> pragma main.table_info(tsv_storage);
0|id|int|0||0
1|seqid|text|0||0
...

この:

sqlite> select count(*) from main.tsv_storage;
198159

また、接続されたデータベースも機能します:

sqlite> select * from uni.fasta_storage where uni.fasta_storage.id = 1;
1 MASNTVSAQ...  Q197F8.1 002R_IIV3 Uncharacterized protein 002R  Q197F8  

しかし、これはそうではありません:

sqlite> select main.tsv_storage.seqid where main.tsv_storage.id=8;
Error: no such column: main.tsv_storage.seqid

編集:これにも問題があります。テーブルに参加する必要がありますか?

insert into main.tsv_storage(seqlength) select length(fasta) from 
uni.fasta_storage where uni.fasta_storage.title = main.tsv_storage.seqid;
Error: no such column: main.tsv_storage.seqid

seqid だけでなく、すべての列で発生します。ここで説明されていることはすべてやったと思います: http://sqlite.awardspace.info/syntax/sqlitepg12.htm

私は何が欠けていますか?

4

2 に答える 2

1
sqlite> select * from main.tsv_storage.seqid where main.tsv_storage.id=8;

選択を検索する場所が定義されていません。テーブル内で検索するフィールドをクエリに指示し、検索するテーブルを定義する必要があります。このselect *部分は、テーブル内のすべてのフィールドを調べるようにクエリに指示します。クエリのfrom一部は、どのテーブルを調べるかをプロセスに伝えます。そして最後に、このwhere部分は、検索時に何を照合するかをクエリに伝えます。

于 2013-03-28T08:52:09.517 に答える
0

を使用する場合INSERT ... SELECT ...、そのSELECT部分は有効なクエリである必要があります。

main.tsv_storageにテーブルがないと、次のような列にアクセスできません。FROM

INSERT INTO main.tsv_storage(seqlength)
SELECT length(fasta)
FROM uni.fasta_storage, main.tsv_storage
WHERE uni.fasta_storage.title = main.tsv_storage.seqid;

そして、コマンド全体が疑わしく見えます。既存のレコードのseqlength列の値を更新しないでよろしいですか? その場合、次のようなものを使用します。

UPDATE main.tsv_storage
SET seqlength = (SELECT length(fasta)
                 FROM uni.fasta_storage
                 WHERE uni.fasta_storage.title = main.tsv_storage.seqid);
于 2013-03-28T09:27:22.087 に答える