为什么我会收到错误“错误:没有这样的列:main。<tablename>。<columname>”虽然它存在?</columname> </tablename>

时间:2013-03-28 08:45:01

标签: sqlite

这有效:

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

我错过了什么?

2 个答案:

答案 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);