Sqlite3 更新表信息 , 合并新的 和 老的表。
需求是做一个配置表升级功能。表结构为:key|value新的配置表可能会增加一条条目,或者删除一条条目。(暂时只考虑这种)新表旧表就需要对比下,只存在于旧表中的配置项,则...
需求是做一个配置表升级功能。表结构为:
key | value
新的配置表可能会增加一条条目,或者删除一条条目。(暂时只考虑这种)
新表 旧表 就需要对比下,只存在于旧表中的配置项,则升级之后应该删除之,只存在新表中的配置项,则升级之后应该保留或者添加之。最后生成一张完整的表。
这里不直接覆盖是因为用户的配置可能是有用的,不能随意删除旧表中有用的配置项。
求SQL语句解决此问题。 展开
key | value
新的配置表可能会增加一条条目,或者删除一条条目。(暂时只考虑这种)
新表 旧表 就需要对比下,只存在于旧表中的配置项,则升级之后应该删除之,只存在新表中的配置项,则升级之后应该保留或者添加之。最后生成一张完整的表。
这里不直接覆盖是因为用户的配置可能是有用的,不能随意删除旧表中有用的配置项。
求SQL语句解决此问题。 展开
1个回答
展开全部
$ sqlite3
SQLite version 3.7.7 2011-06-23 19:49:22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table tb_config (key, value);
sqlite> create table tb_update (key, value);
sqlite> create table tb_history (key, value_old, value_new, updatetime);
sqlite>
sqlite> insert into tb_config values (1, 'config');
sqlite> insert into tb_config values (2, 'ELL');
sqlite> insert into tb_config values (3, 'G-Net');
sqlite> select * from tb_config;
1|config
2|ELL
3|G-Net
sqlite>
sqlite> insert into tb_update values (2, 'ELL');
sqlite> insert into tb_update values (3, 'G-Net BoSS');
sqlite> insert into tb_update values (4, 'test');
sqlite> select * from tb_update;
2|ELL
3|G-Net BoSS
4|test
sqlite>
sqlite> -- 移除删除的条目
sqlite> insert into tb_history
...> select a.key
...> , a.value as value_old
...> , NULL as value_new
...> , datetime('now') as updatetime
...> from tb_config a
...> left join tb_update b on a.key = b.key
...> where b.key is null;
sqlite>
sqlite> delete from tb_config
...> where not exists (select 1
...> from tb_update
...> where tb_config.key = tb_update.key);
sqlite>
sqlite> -- 新添加的条目
sqlite> insert into tb_config
...> select tb_update.*
...> from tb_update
...> left join tb_config on tb_config.key = tb_update.key
...> where tb_config.key is null;
sqlite>
sqlite> -- 更新的条目
sqlite> insert into tb_history
...> select a.key
...> , a.value as value_old
...> , b.value as value_new
...> , datetime('now') as updatetime
...> from tb_config a
...> join tb_update b on b.key = a.key
...> where b.value != a.value;
sqlite>
sqlite> update tb_config set value = (
...> select tb_update.value
...> from tb_update
...> where tb_update.key = tb_config.key
...> and tb_config.value != tb_update.value
...> );
sqlite>
sqlite> select * from tb_config;
2|
3|G-Net BoSS
4|
sqlite> select * from tb_update;
2|ELL
3|G-Net BoSS
4|test
sqlite> select * from tb_history;
1|config||2013-10-12 03:41:43
3|G-Net|G-Net BoSS|2013-10-12 03:41:43
sqlite> .q
$
AiPPT
2024-09-19 广告
2024-09-19 广告
随着AI技术的飞速发展,如今市面上涌现了许多实用易操作的AI生成工具1、简介:AiPPT: 这款AI工具智能理解用户输入的主题,提供“AI智能生成”和“导入本地大纲”的选项,生成的PPT内容丰富多样,可自由编辑和添加元素,图表类型包括柱状图...
点击进入详情页
本回答由AiPPT提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询