gpt4 book ai didi

sql - 在 SQLite 中合并时在 UPDATE 语句中使用 JOINS

转载 作者:搜寻专家 更新时间:2023-10-30 20:39:43 26 4
gpt4 key购买 nike

我目前正在使用分布式 SQLite 数据库。每个客户端都有自己的数据库,他可以与服务器数据库同步。

服务器从客户端接收数据库并根据客户端发送的数据库更新和插入自己的行。

虽然插入新记录很简单:

ATTACH DATABASE 'clients_uploaded_db' AS toMerge;
INSERT INTO `presentation` SELECT * FROM toMerge.presentation WHERE id NOT IN (
SELECT id FROM `presentation`
)

更新不是。我需要检查客户端记录是否已更改(presentation.changedate 的值小于客户端数据库中的 presentation.changedate)并在必要时进行更新。

在诸如 MySQL 的 DBMS 中,以下是可能的。但是在 SQLite 中对更新使用连接是不可能的。

ATTACH DATABASE 'clients_uploaded_db' AS toMerge;
UPDATE presentation
INNER JOIN toMerge.presentation AS tp ON
id = tp.id
SET
label = tp.label
WHERE
tp.changedate > changedate

我已经通读了几个 SO 问题,但我只能找到只需要更新一行或 ID 已知的解决方案。


数据库结构

服务器数据库:

演示文稿(id:pk、标签、更改)

clients_uploaded_db:

演示文稿(id:pk、标签、更改)


长话短说

我无法在 UPDATE 上连接表,但我需要使表中的行与我的查询中可用的另一个数据库中的表中的行完全相同,但前提是 changedate第二个数据库的 col 高于第一个数据库的 col。


到目前为止我做了什么

  • 尝试加入相关表
  • 以编程方式遍历记录并在必要时进行更新(工作正常但会降低性能)

最佳答案

SQLite 不支持 from 子句。所以你必须用相关的子查询来做到这一点。目前尚不清楚您的更新应该做什么。但这里有一个例子

UPDATE presentation 
SET label = (select tp.label
from toMerge.presentation tp
where presentation.id = tp.id and
tp.changedate > presentation.changedate
order by tp.change_date
limit 1);

关于sql - 在 SQLite 中合并时在 UPDATE 语句中使用 JOINS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25037096/

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