经过4个小时的谷歌搜索和更多小时的实验,我最后的希望是有人能告诉我当我尝试以下操作时发生了什么:
sqlite3 test1.sqlite
attach database 'test2.sqlite' as newDB;
这是有效的-没有错误消息,“.databases”将“newdb”显示为2。newdb”和“main”的结构完全相同:相同的表、相同的列、所有内容的名称都相同。简单的事情
select * from main.ztip;
或
select * from newDB.ztip;
作品。(“ztip”显然是两个dbs中的有效表名)但是当我尝试做我需要做的事情时(为了简单起见省略where子句)
update main.ztip set zisfavorite=newDB.ztip.zisfavorite;
繁荣!找不到列“newdb.ztip.zisfavorite”。同样的道理
update main.ztip set zisfavorite=newDB.zisfavorite;
我是出于绝望才尝试的。(列名是唯一的。)
有人知道我想做的事是否可能,以及如何使工作?
提前谢谢你,
汤姆
最佳答案
现在还不太清楚你想在这里更新什么。
当UPDATE my_table SET col_a=col_b
和col_a
是同一表中的列时,可以使用col_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子句的细节将取决于表的实际结构。确保它只返回一个值。
关于database - 如何从sqlite3的附加数据库中的列更新?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9769824/