我在这里面临一个小问题。我有一个包含多列的表,但我想要的是编写一个sqlite查询,在我的python脚本中使用,以便我可以插入如果找不到密钥,或者如果已经找到密钥则更新其他值。我研究了一下并通过了这个answer,但是我对我的内容的关注并没有起作用,并且即使它存在也不断添加新行。
使用this我编写了一个查询,因为我的update / insert依赖于一个名为id的列,这是对该表的外键约束。我要更新的其他两列是名称和角色。所以我想要做的是如果找不到id,则插入所有三个。如果找到,则查看其他两列是否具有相同的值并更新它。这是我的尝试。
INSERT OR REPLACE INTO tblExample(id, name, role)
VALUES ( COALESCE((SELECT id FROM tblExample WHERE id = 1),'1'),'name','role');
但它仍在插入新行。为什么?我怎么能避免呢?任何更简单的解决方案?
答案 0 :(得分:1)
有几件事:
重复检测基于您要插入的表的PRIMARY KEY
定义。如果您没有在表上明确定义主键,它将使用唯一的ROW_ID
值(并且您将始终获得一个新行)。这张表的PRIMARY KEY
是什么?
INSERT OR REPLACE
确实替换了行,而不是UPDATE。这意味着如果检测到重复并选择了REPLACE路径,则如果未指定DEFAULT
,则语句中未给定值的任何列将更新为其DEFAULT
值或更新为NULL / em>的。换句话说,如果您的表格中有一个名为city
的附加列,并且替换了一行,则city
将为NULL
,而不是原始行中的任何值。
答案 1 :(得分:0)
这应该可行,但诀窍是确保你的id(我假设是这个表的主键)与现有id匹配,否则它不会将其视为重复记录。