我拥有的: 1个表(表格在DB' s中) 2个数据库(目前使用+从去年(旧)存档) " ID"是表的主键。
我的问题: 归档数据库表中包含当前使用的数据库表中不存在的行。任何人都可以告诉我如何从旧数据库表更新当前使用的数据库表(即从旧数据库表插入*唯一行到新数据库表)
这听起来很简单,但在继续操作之前需要一些建议,因为我不想要重复的行,我只想将旧表中的行(当前使用的数据库表中不存在)放入新表中(副本)只是很好)。
我希望我解释清楚。
答案 0 :(得分:2)
仅当旧表中不存在具有相同id的行时才从新表中插入行:
insert into old_table select * from new_table nt
where not exists (select 1 from old_table
where id = nt.id)
(指定插入和选择的列很好 - 但我在这里很懒...)
答案 1 :(得分:1)
您通常可以通过在数据库名称前添加前缀来表示来自其他数据库的表:new_db.foo_table
或old_db.foo_table
。这样,您可以在旧表中查找新表中没有重复项的行:
select *
from old_db.foo_table as old_foo
where not exists (
select 1
from new_db.foo_table as new_foo
where new_foo.key_field = old_foo.key_field
-- add more comparisons as needed
);
然后,您可以使用insert into new_db.foo_table select ...
语法将记录放入新表中。
答案 2 :(得分:1)
在目标表中使用LEFT JOIN过滤NULL。我认为它会更快
INSERT INTO NEW_TABLE
SELECT ot.* FROM OLD_TABLE ot
LEFT JOIN NEW_TABLE nt on ot.ID = nt.ID
WHERE nt.ID IS NULL