Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQL-使用临时表更新主表_Python_Sql_Sqlite_Sql Update - Fatal编程技术网

Python SQL-使用临时表更新主表

Python SQL-使用临时表更新主表,python,sql,sqlite,sql-update,Python,Sql,Sqlite,Sql Update,我有一个关于SQL的问题,特别是SQLite3。我有两张桌子,让我们把它们命名为main_table和temp_table。这些表基于相同的关系模式,因此它们具有相同的列但不同的行值 现在我想做的是: 对于主表的每一行,如果临时表中有一行具有相同ID,我希望替换它。否则,我希望保留表中的旧行 我正在考虑使用一些连接,但它不能提供我想要的东西 你能给我一个建议吗 编辑:传统信息: 我希望避免写入所有列,因为这些表包含数十个属性,而且由于我必须更新所有列,因此不必全部写入。您有两种方法: 使用临时表

我有一个关于SQL的问题,特别是SQLite3。我有两张桌子,让我们把它们命名为main_table和temp_table。这些表基于相同的关系模式,因此它们具有相同的列但不同的行值

现在我想做的是:

对于主表的每一行,如果临时表中有一行具有相同ID,我希望替换它。否则,我希望保留表中的旧行

我正在考虑使用一些连接,但它不能提供我想要的东西

你能给我一个建议吗

编辑:传统信息:

我希望避免写入所有列,因为这些表包含数十个属性,而且由于我必须更新所有列,因此不必全部写入。

您有两种方法:

使用临时表中的数据更新主表中的当前行。关系将以ID为基础

在temp_表中添加一列,以标记所有必须传输到main_表的行,或添加其他表以存储必须传输的ID。然后删除所有必须从主表中传输的行,并使用带有标记的列或新表从临时表中插入相应的行


如果表具有相同的结构,则只需使用SELECT*:

开始 从主表中删除 在SELECT id中的WHERE id 从临时表格; 插入到主表中 从临时表格中选择*; 犯罪
这还将在temp_表中添加以前不存在于main_表中的任何新行。

与此问题非常类似:对sqlite没有任何线索,但闻起来它是一个用于合并或使用subselect进行更新的作业。为什么要使用subselect,@Thomas Tschernich?只要更新。如果你用表B中的数据更新表a,你需要在更新中选择一个子集。或者,如果sqlite.update m set m.col1=t.col1中允许,您可以像MSSQL中那样执行一个奇特的更新联接。。。从m.id=t.id上的主表m内部联接临时表t开始,更新除pot id外的所有列@Thomas Tschernich.Nice!非常感谢。优雅的蚂蚁简单的解决方案。