gpt4 book ai didi

SQL:插入新记录或仅替换某些字段的查询

转载 作者:行者123 更新时间:2023-12-03 17:05:26 26 4
gpt4 key购买 nike

我的数据库是 SQLite,但我确定问题一般适用于 SQL。比如说,我有一个表“students”,其中包含列“id”(主键)、“name”、“selected”。有时我需要从外部源更新所述表,但我只收到一张 ID 和名称表。当我需要对每一行进行上述更新时:

  1. 如果不存在具有相同 ID 的行,则将新行添加到表中,默认值为“selected”

  2. 如果行已经存在,只更新“名称”字段,不修改“已选择”

这应该通过带有占位符的单个查询批量完成。此外,案例被简化了,实际上我需要编写通用代码来更新一组表,每个表包含几个要更新的字段和几个“本地”字段。

不幸的是,我找不到合适的方式来表达我对SQLite的渴望。如果我使用 REPLACE 查询:

INSERT OR REPLACE INTO students (id, name) VALUES (:id, :name)

这将清除“selected”字段,而如果我使用 UPDATE:

UPDATE students SET name = :name WHERE id = :id

这不会添加新行。

那么,正确的做法是什么?我觉得我错过了一些非常非常简单的东西,当我得到答案时我会感到非常非常愚蠢:)

最佳答案

INSERT 或 REPLACE 不是通用的。每个 DB 都有自己的语法(例如,SQL Server 2005 及更高版本的 MERGE),许多数据库并没有全部。通用的解决方案是两条语句。

UPDATE students SET name = :name WHERE id = :id

其次是

INSERT INTO Students 
(ID, Name)
Values
(:id,:name)
WHERE
Not exists (select * from students where ID= :id)

关于SQL:插入新记录或仅替换某些字段的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4677066/

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