SQL:将数据从1个表复制到3个其他表

时间:2011-03-17 18:51:23

标签: sql sql-server-2008 ssms

我一直在阅读SQL插入INTO的W3 Schools,根据我的理解,我创建了一个数据备份副本到一个新表。我有300多条记录要添加。

我有4张桌子,其中一张是我应对的来源。 1)卡访问,这是源 2)pro_Profile,主目标 3)pro_Email,secondary dest 4)pro_Address,第三​​个目标

我无法控制这个数据库方案。要重建所有内容以使用1个表然后使用3个表,这是太多的工作。我添加的数据也许与存在的数据重复,因此我们也需要跳过这些数据。

卡访问权限包含以下字段: 映射到pro_Profile的CSUID firstName映射到pro_Profile lastName映射到pro_Profile 映射到pro_Profile的eName 电子邮件地址映射到pro_Email 联系电话号码,映射到pro_Address

一旦我复制到Pro_Profile,它将需要获得主键,profileID,它是所有这些表中对配置文件的引用。

如何将所有这些数据首先复制到pro_Profile中,以便获取唯一的键profileID,它是所有其他表的forgien键?

到目前为止,这是我的代码:

SELECT
    FirstName,
    LastName,
    eName,
    CSUID
INTO

WHERE NOT EXISTS (
 Select
    firstName,
    LastName 
 From
    pro_Profile 
)

影响0行的新QUERY

INSERT INTO pro_Profile ("firstName","lastName","userName","departmentID","csuID")
SELECT "First Name","Last Name","eName","Department","CSUID"
FROM "Card Access"
WHERE NOT EXISTS (
 Select
    firstName,
    LastName 
 From
    pro_Profile 
)

1 个答案:

答案 0 :(得分:1)

插入的格式为

INSERT INTO table1 ( column1 )
SELECT  col1
FROM    table2

所以基本上你选择要插入的内容。您将能够将其作为所有表中的一个语句来执行,并且还可以添加where子句。查看this问题的答案。

更新: 首先编写sql查询以获取要插入的行。所以你上面的查询:

SELECT "First Name","Last Name","eName","Department","CSUID"
FROM "Card Access"
WHERE NOT EXISTS (
 Select
    firstName,
    LastName 
 From
    pro_Profile 
)

单独运行时应返回您要插入的所有结果。当你跑步时,你会得到什么?

更新:我认为你是不存在的误解。查看this。我认为你需要这样的东西:

SELECT "First Name","Last Name","eName","Department","CSUID"
FROM "Card Access" ca
WHERE (
  Select count(*)
  From pro_Profile 
  WHERE firstName = ca.firstName
    AND LastName = ca.lastName
  ) = 0

更新:或者你应该能够做到:

SELECT "First Name","Last Name","eName","Department","CSUID"
FROM "Card Access" ca
WHERE NOT EXISTS (
 Select
    firstName,
    LastName 
 From
    pro_Profile 
 WHERE firstName = ca.firstName
   AND LastName = ca.lastName
)