我想从查询中更新整个表。以下是我的更新功能:
然后我从temp db向设备文件夹插入以下插入代码的新记录。它工作正常。
INSERT INTO main.fList SELECT * FROM SECOND1.fList WHERE not exists (SELECT 1 FROM main.fList WHERE main.fList.GUID = SECOND1.fList.GUID)
但是当我使用以下代码进行更新时,它无法正常工作。它为所有设备数据库表的行更新相同的最高值。
UPDATE 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中的批量更新?
答案 0 :(得分:0)
SQLite不支持UPDATE语句中的连接。
当您使用没有数据库名称的表名时,它引用最里面查询中的第一个匹配表。换句话说,如果您在子查询中使用SECOND1.fList
,则fList
中的任何其他位置都会引用SECOND1
中的表格。
要确保始终引用正确的表,请在所有表引用中使用数据库名称。
主数据库的名称始终为main
,因此所有表引用都应为main.fList
或SECOND1.fList
。
无论如何,如果要更新所有列,可以通过删除要更新的行来简化更新,以便只插入所有新数据:
BEGIN;
DELETE FROM fList WHERE GUID IN (SELECT GUID FROM SECOND1.fList);
INSERT INTO fList SELECT * FROM SECOND1.fList;
COMMIT;
当GUID
列上有UNIQUE约束时,可以将其简化为单个语句:
INSERT OR REPLACE INTO fList SELECT * FROM SECOND1.fList;
在这里,我不会使用main.
,因为我知道自己在做什么。 ☺