如何从sqlite3中附加数据库中的列更新?

时间:2012-03-19 12:04:06

标签: database sqlite

经过4小时的谷歌搜索和更多小时的实验,我最后的希望是有人可以告诉我当我尝试以下内容时发生了什么:

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

这样做 - 没有错误消息,“。database”将“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;
我绝望地尝试了。 (列名是唯一的。)

任何人都知道我想做什么是可能的以及如何工作?

提前致谢, 汤姆

1 个答案:

答案 0 :(得分:3)

目前还不太清楚你在这里要更新的内容。

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子句的细节取决于表的实际结构。确保它只返回一个值。