Ios 如何在Objective C中的SQLite中的更新查询中使用内部联接?

Ios 如何在Objective C中的SQLite中的更新查询中使用内部联接?,ios,objective-c,sqlite,Ios,Objective C,Sqlite,我想在查询时更新整个表。以下是发生的我的更新功能: 存储在iDevice中的数据库A 临时数据库Batabase B下载到设备并存储在设备内的临时文件夹中。两个数据库具有相同的数据库结构 首先,我将临时数据库连接到设备数据库。附加的数据库名称是SECOND1 然后我从下面的插入代码将新记录从临时数据库插入到设备文件夹。它工作得很好 插入main.fList SELECT*FROM SECOND1.fList(不存在)从main.fList中选择1,其中main.fList.GUID=SECOND

我想在查询时更新整个表。以下是发生的我的更新功能:

存储在iDevice中的数据库A 临时数据库Batabase B下载到设备并存储在设备内的临时文件夹中。两个数据库具有相同的数据库结构 首先,我将临时数据库连接到设备数据库。附加的数据库名称是SECOND1 然后我从下面的插入代码将新记录从临时数据库插入到设备文件夹。它工作得很好

插入main.fList SELECT*FROM SECOND1.fList(不存在)从main.fList中选择1,其中main.fList.GUID=SECOND1.fList.GUID

但当我使用下面的代码进行更新时,它并没有正常工作。它为所有设备db表的行更新相同的最大值

更新fList SET Notes=SELECT SECOND1.fList.Notes FROM SECOND1.fList WHERE SECOND1.fList.GUID=fDefectList.GUID WHERE EXISTS SELECT*FROM SECOND1.fList WHERE SECOND1.fList.GUID=fList.GUID

我找到了用于批量更新的SQL查询。代码如下:

UPDATE fTempRank7
SET
 fTempRank7.int_key = fRank7.int_key,
 fTempRank7.int_rank6 = fRank7.int_rank6,
 fTempRank7.title = fRank7.title,
 fTempRank7.sequence = fRank7.sequence,
 fTempRank7.lastupdated = fRank7.lastupdated 
FROM
 fTempRank7 INNER JOIN fRank7 ON
 fTempRank7.int_key = fRank7.int_key
但在sqlite中,此代码不起作用


有人知道sqlite中的批量更新吗?

sqlite不支持update语句中的联接

使用不带数据库名称的表名时,它引用最内层查询中的第一个匹配表。换句话说,如果在子查询中使用SECOND1.fList,则任何其他出现的fList都会引用SECOND1中的表

为确保始终引用正确的表,请在所有表引用中使用数据库名称。 主数据库始终命名为main,因此所有表引用都应为main.fList或SECOND1.fList

无论如何,如果要更新所有列,可以通过删除要更新的行来简化更新,以便插入所有新数据:

开始 从fList中删除,其中GUID在SELECT GUID FROM SECOND1.fList中; 插入fList,从SECOND1.fList选择*; 犯罪 当GUID列上有唯一约束时,可以将其简化为一条语句:

在fList中插入或替换从SECOND1.fList中选择*;
这里我不用main。因为我知道我在做什么。☺

如果您也是在相同条件下加入,为什么要设置fTempRank7.int_key=fRank7.int_key?这是SQL的示例代码。即使SQLIte中没有连接条件,语法错误也会出现在“.”附近。请发布您得到的确切错误。在哪个“.”附近有错误吗?Near.:语法错误:当我在插入更新之前删除现有记录时,性能会有问题吗?如果我想一次更新50000条记录,那要看情况而定。你必须试一试。