经过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_bcol_a是同一表中的列时,可以使用col_b:这将为每行将col_b的设置值更新为col_bcol_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/

10-08 21:19