我有两个表,PhraseId是两者中的主键,Modified是自1970年以来的秒数。修改是数据加载的一部分,但不是必需的,除非它使更新更容易。如果我没有它,那么我只想使用INSERT OR REPLACE
UPDATE
PhraseSource表包含5010行(一些新行和一些更改的行) Phrase表包含5000行。我想用PhraseSource中的新行和更改行更新Phrase表。请注意,我的应用程序不需要显示已修改的数据,但它是为了便于插入或更新而添加的。
这是我想出的。如果这是进行更新和插入的好方法,您能告诉我吗?
PhraseSource with columns PhraseId, Text, Modified
Phrase with columns PhraseId, Text, Modified
如果有更好的方法可以做到这一点(也许使用包含自1970年以来在源上最后一次修改行的秒数的修改后的列),那么我也非常感谢任何建议。
答案 0 :(得分:1)
5000行什么都不是;你可以删除并复制整个表格。
如果要最小化写入的更改量,可以使用Modified
列轻松完成此操作:首先删除所有较旧的行,然后复制所有新行:
DELETE FROM Phrase
WHERE Modified < (SELECT Modified
FROM PhraseSource
WHERE PhraseId = Phrase.PhraseId);
INSERT OR IGNORE INTO Phrase(PhraseId, Text, Modified)
SELECT PhraseId, Text, Modified FROM PhraseSource;
没有Modified
,可以通过比较实际值来完成同样的事情:
DELETE FROM Phrase
WHERE Text IS NOT (SELECT Text
FROM PhraseSource
WHERE PhraseId = Phrase.PhraseId);
INSERT OR IGNORE INTO Phrase(PhraseId, Text)
SELECT PhraseId, Text FROM PhraseSource;