我的数据库是SQLite,但我相信这个问题适用于SQL。例如,我有一个名为“students”的表格,其中包含“id”(主键)、“name”和“selected”三列。不时地,我需要从外部源更新该表格,但我只会收到一个包含id和name的表格。每当发生这样的更新时,我需要执行以下操作:
如果没有具有相同id的行,则向表格中添加新行,并将“selected”设置为默认值。
如果行已经存在,则仅更新“name”字段,而不改变“selected”。
这应该通过单个带占位符的查询批量完成。此外,实际情况比这更复杂,我需要编写通用代码来更新一组包含多个要更新的字段和多个“本地”字段的表格。
不幸的是,我找不到一个合适的方法来表达我对SQLite的期望。如果我使用REPLACE查询:
INSERT OR REPLACE INTO students (id, name) VALUES (:id, :name)
如果我使用UPDATE,它将清除"selected"字段:
UPDATE students SET name = :name WHERE id = :id
这不会添加新行。
那么,正确的方法是什么?我有一种感觉自己错过了非常简单的东西,并且当我得到答案时,我会感到非常愚蠢:)