SQL - 使用临时表更新主表

时间:2015-07-31 14:29:32

标签: python sql sqlite sql-update

我对SQL有疑问,尤其是SQLite3。我有两张桌子,我们将它们命名为main_tabletemp_table。这些表基于相同的关系模式,因此它们具有相同的列但行(值)不同。

现在我想做什么:

对于main_table的每一行,如果temp_table中有一行具有相同的ID,我想替换它。否则我想保留表中的旧行。

我正在考虑使用一些joins,但它没有提供我想要的东西。

你能给我一个建议吗?

编辑:附加信息:

我想避免编写所有列,因为这些表具有数十个属性,因为我必须更新所有列,所以不必写出所有列。

2 个答案:

答案 0 :(得分:1)

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

即可
BEGIN;

DELETE FROM main_table
WHERE id IN (SELECT id
             FROM temp_table);

INSERT INTO main_table
SELECT * FROM temp_table;

COMMIT;

(这也会在temp_table中添加先前在main_table中不存在的任何新行。)

答案 1 :(得分:0)

您有两种方法:

  1. 使用main_table中的数据更新temp_table内的当前行。该关系将基于ID。

  2. temp_table添加一列,以标记必须转移到main_table的所有行,或添加必须转移的存储IDs的附加表。然后删除必须从表main_table传输的所有行,并使用带有标记或新表的列插入temp_table中的相应行。