我对SQL有疑问,尤其是SQLite3。我有两张桌子,我们将它们命名为main_table
和temp_table
。这些表基于相同的关系模式,因此它们具有相同的列但行(值)不同。
现在我想做什么:
对于main_table
的每一行,如果temp_table
中有一行具有相同的ID,我想替换它。否则我想保留表中的旧行。
我正在考虑使用一些joins
,但它没有提供我想要的东西。
你能给我一个建议吗?
编辑:附加信息:
我想避免编写所有列,因为这些表具有数十个属性,因为我必须更新所有列,所以不必写出所有列。
答案 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)
您有两种方法:
使用main_table
中的数据更新temp_table
内的当前行。该关系将基于ID。
向temp_table
添加一列,以标记必须转移到main_table
的所有行,或添加必须转移的存储IDs
的附加表。然后删除必须从表main_table
传输的所有行,并使用带有标记或新表的列插入temp_table
中的相应行。