SQL - 使用临时 table 更新主要 table
SQL - update main table using temp table
我有一个关于 SQL 的问题,尤其是 SQLite3。我有两个 table,我们将它们命名为 main_table
和 temp_table
。这些 table 基于相同的关系模式,因此它们具有相同的列但不同的行(值)。
现在我想做的是:
对于 main_table
的每一行,如果 temp_table
中有一行具有相同的 ID,我想替换它。否则我想保留 table.
中的旧行
我正在考虑使用一些 joins
,但它没有提供我想要的东西。
你能给我一个建议吗?
编辑:附加信息:
我想避免写出所有列,因为那些 table 包含数十个属性,并且由于我必须更新所有列,因此没有必要写出所有列。
你有两种方法:
用 temp_table
中的数据更新 main_table
中的当前行。关系将基于 ID。
向 temp_table
添加一列以标记必须转移到 main_table
的所有行或添加额外的 table 以存储 IDs
必须转移。然后删除所有必须从 table main_table
传输的行,并使用带标记的列或新的 table.
[=26 从 temp_table
插入相应的行=]
如果表格具有相同的结构,您可以简单地使用 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
中不存在的任何新行。)
我有一个关于 SQL 的问题,尤其是 SQLite3。我有两个 table,我们将它们命名为 main_table
和 temp_table
。这些 table 基于相同的关系模式,因此它们具有相同的列但不同的行(值)。
现在我想做的是:
对于 main_table
的每一行,如果 temp_table
中有一行具有相同的 ID,我想替换它。否则我想保留 table.
我正在考虑使用一些 joins
,但它没有提供我想要的东西。
你能给我一个建议吗?
编辑:附加信息:
我想避免写出所有列,因为那些 table 包含数十个属性,并且由于我必须更新所有列,因此没有必要写出所有列。
你有两种方法:
用
temp_table
中的数据更新main_table
中的当前行。关系将基于 ID。向
[=26 从temp_table
添加一列以标记必须转移到main_table
的所有行或添加额外的 table 以存储IDs
必须转移。然后删除所有必须从 tablemain_table
传输的行,并使用带标记的列或新的 table.temp_table
插入相应的行=]
如果表格具有相同的结构,您可以简单地使用 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
中不存在的任何新行。)