经过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;
我绝望地尝试了。 (列名是唯一的。)
任何人都知道我想做什么是可能的以及如何工作?
提前致谢, 汤姆
答案 0 :(得分:3)
目前还不太清楚你在这里要更新的内容。
当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子句的细节取决于表的实际结构。确保它只返回一个值。