这有效:
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
我错过了什么?
答案 0 :(得分:1)
sqlite> select * from main.tsv_storage.seqid where main.tsv_storage.id=8;
您尚未定义查找选择的位置。您需要告诉查询在表中搜索哪些字段,然后定义要搜索的表。 select *
部分告诉查询查看表中的所有字段。查询的from
部分告诉进程要查看的表。最后,where
部分告诉查询在查找时要匹配的内容。
答案 1 :(得分: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);