Python 在选定的行中更新单个sqlite行
我有一个要更新的sqlite表。我想在Col2和Col3取某个指定值的单行上更改Col1中的条目 它是一个链接表,其中许多行在Col2和Col3中具有相同的元素组合。因此,如果我运行:Python 在选定的行中更新单个sqlite行,python,sqlite,Python,Sqlite,我有一个要更新的sqlite表。我想在Col2和Col3取某个指定值的单行上更改Col1中的条目 它是一个链接表,其中许多行在Col2和Col3中具有相同的元素组合。因此,如果我运行: c.execute("""UPDATE Table1 SET Col1=(?) WHERE Col2=(?) AND Col3=(?) """, (var1, var2, var3,))
c.execute("""UPDATE Table1 SET Col1=(?)
WHERE Col2=(?) AND Col3=(?)
""", (var1, var2, var3,))
这将导致问题,因为它将更改Col2和Col3采用指定值的每一行
值得注意的是,表中的每一行在Col4中都有一个唯一的数字条目——因此我的直觉是,我可以选择Col4中具有最低值的行,其中Col2和3马赫为其指定值,但在阅读了有关更新的文档后,我不清楚如何进行更新。您可以使用exists逻辑进行更新: 更新表1 设置Col1=? 其中Col2=?和Col3=?和 不存在从表1 t1中选择1 其中t1.Col2=表1.Col2和t1.Col3=表1.Col3和 t1.Col4<表1.Col4; 上述exists子句断言,对于任何匹配的记录,我们无法找到具有相同Col2和Col3值但较小Col4值的另一条记录。因为Col4是唯一的,所以您所要做的就是找到具有min Col4的行,其中Col2和Col3等于您的参数,您可以使用:
SELECT MIN(Col4) FROM Table1 WHERE (Col2, Col3) = (?, ?)
因此,您的代码应该是:
c.execute("""UPDATE Table1
SET Col1 = ?
WHERE Col4 = (SELECT MIN(Col4) FROM Table1 WHERE (Col2, Col3) = (?, ?))
""", (var1, var2, var3,))