SQLite中如何用UPDATE结合SELECT更新已有记录而非插入新行
问题原因
你之前使用的INSERT是新增记录的语法,执行后会在表中插入新行,不会修改已有行的字段值,这就是产生冗余记录的核心原因。
实现代码
要给ARCHIVIO_Squadre_Campionato表已有的1-20行的ID_Campionato字段批量赋值,使用UPDATE结合子查询的实现代码如下:
cursor.executescript(""" UPDATE ARCHIVIO_Squadre_Campionato SET ID_Campionato = ( SELECT ID_Campionato FROM ARCHIVIO_Campionati WHERE Nome_Campionato = 'Serie A' LIMIT 1 ) WHERE ID_Sq BETWEEN 1 AND 20; """) con.commit()
说明
- 子查询会先取出
ARCHIVIO_Campionati表中Nome_Campionato为'Serie A'对应的ID_Campionato值,外层UPDATE语句会把该值批量赋值给符合WHERE条件的所有行的对应字段 LIMIT 1是防护逻辑,避免ARCHIVIO_Campionati表中存在多个匹配记录时,子查询返回多值导致UPDATE执行报错- 如果你需要给整张表的所有行都赋值该
ID_Campionato,直接删除WHERE ID_Sq BETWEEN 1 AND 20条件即可
注意:你提供的
ARCHIVIO_Campionati表结构中,Nome_Campionato字段类型标记为INTEGER,但实际存储的是文本类型的'Serie A',属于结构定义错误,建议将该字段类型调整为TEXT,避免后续查询匹配出现异常。
内容的提问来源于stack exchange,提问作者Erling Olsen
相关产品推荐
相关产品推荐

