gpt4 book ai didi

android - SQLite,基于列中的较高值合并两个表

转载 作者:行者123 更新时间:2023-12-03 18:17:18 26 4
gpt4 key购买 nike

我有两个SQLite数据库,每个数据库都有一个表,我需要通过合并具有相同键的行来保持同步。表格的布局如下:

CREATE TABLE titles ( name    TEXT    PRIMARY KEY,
chapter TEXT ,
page INTEGER DEFAULT 1 ,
updated INTEGER DEFAULT 0 );


我希望能够在两个表中的每一个上运行相同的命令,结果是,对于具有相同名称的成对的行,无论哪个行在更新中具有更大的值,都将完全覆盖另一行,而没有行具有匹配项将被复制,因此完成后两个表都相同。

这是针对Android应用程序的,因此我可以用Java进行比较,但如果可能的话,我更喜欢使用SQLite解决方案。我对SQL的经验不是很丰富,因此您能给出的解释越多,对您的帮助就越大。

编辑
需要说明的是:我需要可以在任意时间执行的内容,以供其他代码调用。这两个数据库中的一个并不总是存在,并且当对另一个数据库进行操作时可能并不完整,因此我认为触发器不会起作用。

最佳答案

假设您将另一个数据库attached添加到主数据库中:

ATTACH '/some/where/.../the/other/db-file' AS other;


您可以先删除所有要覆盖的记录,因为它们的 updated字段小于另一个表中相应的 updated字段:

DELETE FROM main.titles
WHERE updated < (SELECT updated
FROM other.titles
WHERE other.titles.name = main.titles.name);


然后复制所有更新的和丢失的记录:

INSERT INTO main.titles
SELECT * FROM other.titles
WHERE name NOT IN (SELECT name
FROM main.titles);


要向另一个方向更新,请交换 main / other数据库名称。

关于android - SQLite,基于列中的较高值合并两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15048290/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com