2013-03-28 47 views
0

這工作:爲什麼我會收到錯誤「錯誤:沒有這樣的列:主。<tablename>。<columname>」雖然存在?

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 * 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

當使用INSERT ... SELECT ...時,SELECT部分必須是有效的查詢。

你離不開具有FROM子句中的表訪問諸如main.tsv_storage列:

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); 
+0

你是對的,我使用了更新。 – 2013-03-28 10:04:58

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

您還沒有定義在哪裏尋找選擇。您需要告訴查詢在表格中搜索哪些字段,然後定義您正在搜索的表格。 select *部分告訴查詢查看錶中的所有字段。查詢的from部分告訴進程要查看哪個表。最後,where部分告訴查詢在查找時要匹配什麼。

+0

權......對不起,我想展示一個最低工作/不工作例如,在這樣失敗了。我添加了更復雜的查詢,這也使我煩惱。 – 2013-03-28 09:02:56

相關問題