使用临时表更新主表



我有一个关于SQL的问题,特别是SQLite3。我有两个表,命名为main_tabletemp_table。这些表基于相同的关系模式,因此它们具有相同的列,但不同的行(值)。

现在我要做的是:

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

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

你能给我一个建议吗?

编辑:附加信息:

我想避免写所有的列,因为这些表包含数十个属性,因为我必须更新所有的列,所以没有必要写出所有的。

如果表具有相同的结构,则可以简单地使用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. temp_table的数据更新main_table中的当前行。关系将基于ID。

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

最新更新