我有一个关于SQL的问题,特别是SQLite3。我有两个表,命名为main_table
和temp_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
中存在的任何新行)
您有两种方法:
-
用
temp_table
的数据更新main_table
中的当前行。关系将基于ID。 -
在
temp_table
中添加一列来标记所有必须转移到main_table
的行,或者添加额外的表来存储必须转移的IDs
。然后删除所有必须从表main_table
中转移的行,并使用带标记的列或新表从temp_table
中插入相应的行。