当前位置: 首页 > 面试题库 >

SQL将数据从登台表插入到其他两个表

厍建义
2023-03-14
问题内容

我遇到了一种情况,其中CSV已上传到我的应用程序,并且基本上每行都需要放入数据库中。我读了每一行并建立了一个数据表,然后SqlBulkCopy该表直到登台表。

登台表如下所示:

UserID, GroupID, FirstName, LastName, EmailAddress

我在数据库中还有其他三个相关的表。联系人表,组表和组联系人表。

Contacts:
ID, UserID, FirstName, LastName, EmailAddress

Groups
ID, UserID, Name, Description

ContactGroupMapping
ID, ContactID, GroupID

ContactGroupMapping表仅将联系人映射到组。希望登台表现在有意义,它包含每个导入的联系人的详细信息以及应该映射到的联系人的组。

我的计划是在SqlBulkCopy之后对数据库运行查询,以将数据从登台表移至Contacts和ContactGroupMapping表。当前,我有一个查询,看起来像这样:

INSERT INTO Contacts (UserID, FirstName, LastName, EmailAddress)

SELECT DISTINCT [t1].UserID, [t1].EmailAddress, [t1].FirstName, [t1].LastName FROM ContactImportStaging as [t1]
WHERE NOT EXISTS 
(
    SELECT UserID, EmailAddress, FirstName, LastName FROM Contacts
    WHERE UserID = [t1].UserID AND EmailAddress = [t1].EmailAddress AND FirstName = [t1].FirstName AND LastName = [t1].LastName
)

因此,我的问题是,尽管这会将所有不同的联系人插入到我的联系人表中,但是我却无法将每个新插入的联系人的关联行添加到映射表中。

我能想到的唯一解决方案(可能是因为我很讨厌SQL)是在contacts表中有一个额外的可空字段,用于标识与该联系人关联的组并将其插入。然后,我可以运行第二个查询来选择此列中具有值的所有联系人,并将其插入到映射表中。

关于如何最有效地实现这种目标的任何想法?

谢谢。

编辑:
详细说明对象模型:有任意数量的联系人和任意数量的组。可以通过ContactGroupMapping表中的条目将联系人分组。一个联系人可以处于任意数量的组中。在数据库级别,此模型是三个表
ContactsGroupsContactGroupMapping的关注点
。我需要从登台表中移出一行并创建两行;一个在“联系人”表中,另一个在“ ContactGroupMapping”表中。


问题答案:

我只是将CSV批量复制到暂存数据库表中。如果您担心空间不足,可以稍后删除该表。

将CSV复制到例如StagingTable之后,诀窍是将其拆分为其他表。由于现在可以在数据库中引用您的CSV,因此您可以联接其他表以检索新表的ID:

insert into ContactGroupMapping
select cont.ID, grp.ID
from StagingTable stag
inner join Contacts cont on cont.UserID = stag.UserID
inner join Groups grp on grp.GroupID = stag.GroupID

一个更简单的解决方案是保留原始的GroupID和UserID。这样,填充GroupContactMapping就很容易了:

insert into ContactGroupMapping
select UserID, GroupID
from StagingTable stag


 类似资料:
  • 我有两个SQL表 表 1: 列1, 列2, 列3, 列4, 列5, 列6, 列7 表 2: 列1, 列2, 列4, 列5, 列10 (新列) 应该被赋予默认值0 我需要将数据从表1复制到表2

  • 问题内容: 我有2个不同的表,但各列的命名略有不同。我想从一个表中获取信息,然后将其放入另一个表中。仅当表1中的“信息字段”不为null时,才需要将表1中的信息放入表2中。表2在创建任何东西时都有一个唯一的ID,因此插入的任何东西都需要获得下一个可用的ID号。 表格1 表2 问题答案: 这应该工作。您无需担心Table2中的identify字段。

  • 问题内容: 我试图将数据从一个表插入到另一个表,这是我收到的错误消息: 错误:将INERT插入到content2(d1,d2,d3)值(John,Doo,24); 错误:在字段列表中插入未知列’John’错误:INSERT INTO content2(d1,d2,d3)VALUES(Mary,Moe,36); ‘字段列表’中的未知列’Mary’错误:INSERT INTO content2(d1,

  • 我有一个登记表,并将插入数据输入到两个不同的表使用注册功能。这是表结构: 使用者 用户id(int) 用户电子邮件(varchar(64)) 用户名(varchar(64)) 用户通行证(varchar(64)) 轮廓 教授id(int) 用户id(int) 名字(varchar(64)) 姓氏(varchar(64)) …(其他领域) 我将变量放入两个不同的数组($data1) 模型是这样的:

  • 问题内容: 我有一张表格,列出了来自特定网站的评论数量,如下所示: 我还有另一个表,列出了所有站点,例如从1到10 使用以下代码,我可以找出上个月缺少哪些站点条目: 生产: 我希望能够使用一些默认值(即“ 0”)将查询中列出的缺失网站插入到注释表中 问题是,我如何更新/插入表/值? 干杯, 背风处 问题答案:

  • 嗨,我想使用客户id在一个表中插入客户名称,在另一个表插入客户城市。我的代码只插入客户。城市没有插入 我的控制台 在2017-01-30 14:40:15 0530开始为127.0.0.1发布POST"/页面"Pages计数器的处理#创建为超文本标记语言参数:{"utf8"= 新.html.erb 页面_控制器.rb