2012-03-19 57 views
1

4小時谷歌搜索的多小時的實驗後,幾乎我最後的希望是,有人能告訴我是什麼,當我嘗試以下方法去:如何從sqlite3中的附加數據庫中的列進行更新?

sqlite3 test1.sqlite 
    attach database 'test2.sqlite' as newDB; 

這工作 - 沒有錯誤消息和」 .databases 「顯示」newDB「爲#2。 「newDB」和「main」具有完全相同的結構:相同的表,相同的列,相同的名稱。簡單的東西像

select * from main.ztip; 

select * from newDB.ztip; 

作品。 (「ztip」之中,很明顯,有效的表在兩個DB的名稱。)但是,當我試圖做我需要做的(省略的WHERE子句簡單)

update main.ztip set zisfavorite=newDB.ztip.zisfavorite; 

BOOM!未找到「newDB.ztip.zisfavorite」列。

update main.ztip set zisfavorite=newDB.zisfavorite; 

我試過了絕望。 (列名是唯一的。)

有人知道我想要做的事是可能的,以及如何使工作?

由於提前, 湯姆

+0

因爲您以前的命令僅用於顯示來自newDB的數據,不會將其存儲! – hjpotter92 2012-03-19 12:12:56

回答

3

這不是很清楚你要在這裏更新什麼。

您可以使用UPDATE my_table SET col_a=col_bcol_acol_b在同一個表中的列:這將更新col_b設定值到col_b每一行。 col_b不僅僅是一個列名,而是在這種情況下與一個特定的值相關聯。

但是,在update main.ztip set zisfavorite=newDB.ztip.zisfavorite,newDB.ztip.zisfavorite代表整個列。沒有理由知道你願意使用哪一行和哪一個值。

也許你應該使用類似:

UPDATE main.ztip z1 SET zisfavorite=(SELECT z2.zisfavorite FROM newDB.ztip z2 WHERE z2.id=z1.id) 

的細節where子句將取決於你的表的實際結構,當然。確保它只返回一個值。

+0

謝謝布魯諾。對於「我要更新的內容」的混淆抱歉。我應該留下WHERE子句(ztipid = 7)來清楚地表明這不是問題。 – tlittle 2012-03-19 13:30:04

+0

你的WHERE條款在哪裏?你需要一個'SELECT'來從另一個表中選擇一個特定的行/值。 – Bruno 2012-03-19 13:35:43

+0

終於!這是我在任何地方發現的唯一答案! – Phil 2014-09-19 17:11:37

相關問題