经过 4 个小时的谷歌搜索和更多个小时的实验后,我最后的希望是有人可以告诉我当我尝试以下操作时发生了什么:
sqlite3 test1.sqlite
attach database 'test2.sqlite' as newDB;
这有效 - 没有错误消息,并且“.databases”将“newDB”显示为#2。 “newDB”和“main”具有完全相同的结构:相同的表、相同的列、所有内容都相同的名称。简单的东西,比如
select * from main.ztip;
或
select * from newDB.ztip;
有效。 (“ztip”显然是两个数据库中的有效表名。)但是当我尝试做我需要做的事情时(为了简单起见,省略 WHERE 子句)
update main.ztip set zisfavorite=newDB.ztip.zisfavorite;
轰!未找到“newDB.ztip.zisfavorite”列。同样适用
update main.ztip set zisfavorite=newDB.zisfavorite;
我出于绝望而尝试了它。 (列名称是唯一的。)
有人知道我想做的事情是否可行以及如何实现?
提前致谢, 汤姆
最佳答案
不太清楚您要在此处更新的内容。
当 col_a
和 col_b
是同一表中的列时,您可以使用 UPDATE my_table SET 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/