sql - 插入第三个表,其中 2 个表具有相同的 Id
问题描述
我有一个巨大的数据库,想用更小的块来处理它,所以我试图编写脚本并将行复制到一个临时表上,处理它,然后将它们复制回来。
现在我已经PersonMeta
从旧数据库中复制了大约 1000 行,现在想为People
表插入相应的行。
所以基本上我想从whereolddb.People
插入数据并具有相同的代码。newdb.People
newdb.PersonMeta
newdb.People
我创建了这个脚本,但由于某种原因它没有复制所有行。例如,它应该复制 1000 行时复制 960 行。
INSERT INTO [newdb].[dbo].[People] ([Id]
,[Name]
,[PersonId])
SELECT fp.[Id]
,fp.[Name]
,fp.[PersonId]
FROM [olddb].[dbo].[People] fp
INNER JOIN [newdb].[dbo].[PersonMeta] pm on
pm.PersonId = fp.PersonId
编辑:
我最初写了 100 行,它是 1000 行。所以查询选择 960(少 40)
编辑 2
该People
表有一些列的重复值PersonId
。我删除了它们,现在在我运行查询之后它复制了 956 行(比以前少了 4 行)。
编辑3:
我创建了这个小提琴,它似乎工作得很好。
但是,我对数据库进行了一些查询。结果是,当我使用RIGHT JOIN
未复制的那些记录的值进行查询时,它们都是 NULL。因此,当我运行以下查询时:
Select fp.*, fp.personid, pm.personid
From [olddb].[dbo].[People] fp
right join [newdb].[dbo].[PersonMeta] pm on
fp.personid = pm.personid
它返回这个:
我可以尝试复制数据的另一种方法吗?
解决方案
考虑到您想在新表中保留不同且唯一的记录。
下面的查询将创建与旧表相同的模式,并将旧表中存在的所有数据复制到新表中。
选择 * 进入 [newdb].[dbo].[People] from [olddb].[dbo].[People]
现在,如果您想让新表中的数据与 [newdb].[dbo].[PersonMeta] 中的唯一记录保持同步。你可以简单地做
从 personid 不在的 [newdb].[dbo].[People] 中删除(从 [newdb].[dbo].[PersonMeta] 中选择 personid)
推荐阅读
- python - PermissionError:[Errno 13] Windows 上的权限被拒绝
- arrays - 我想知道在 for 循环中使用 list.length 和使用 var (int length = list.length) 之间的区别
- python - 如何在 python 中使用 sqlalchemy 调用 mysql 函数?
- python - 使用python通过URL获取数据文件时出错
- automated-tests - 有没有办法在不破坏格式的情况下将空手道黄瓜报告发布到 Slack?
- javascript - 如何每行声明一个对象属性?
- linked-list - 我可以创建一个 Github 网站并在其中存储我的存储库的所有链接吗?
- excel - 在文件夹中循环excel工作簿并删除除一张以外的所有工作表
- python-3.x - python boto3上传的文件不可见
- javascript - 在 CSS 中附加 div 时如何获得不同的边距?