Transact-SQL:如果数据为';t相关

Transact-SQL:如果数据为';t相关,sql,sql-server,tsql,sql-server-2012,ssms,Sql,Sql Server,Tsql,Sql Server 2012,Ssms,我有3个表格,其中两个相关(姓名和性别): Staging(id、姓名、性别) Name(id,Name genderID) 性别(id,性别) 数据已经以非规范化的方式“转储”到暂存(id、姓名、性别),现在我正在尝试规范化数据 我需要能够使用t-sql执行以下操作 将临时表中的名称插入名称表 从性别表中获取id,并将其作为外键插入到名称表中 问题是性别和姓名表与登台无关,所以我试图理解该事务应该如何工作的逻辑 我的假设是,我需要以某种方式使用某种类型的子查询将插入SELECT,但我只是不知所

我有3个表格,其中两个相关(姓名和性别):

Staging(id、姓名、性别)

Name(id,Name genderID)

性别(id,性别)

数据已经以非规范化的方式“转储”到
暂存(id、姓名、性别)
,现在我正在尝试规范化数据

我需要能够使用t-sql执行以下操作

  • 将临时表中的名称插入名称表
  • 从性别表中获取id,并将其作为外键插入到名称表中
  • 问题是性别和姓名表与登台无关,所以我试图理解该事务应该如何工作的逻辑


    我的假设是,我需要以某种方式使用某种类型的子查询将插入SELECT,但我只是不知所措。谢谢。

    是的,您需要
    插入…选择
    。通过列
    Gender
    将表
    staging
    Gender
    连接,这样您就可以获得
    ID

    INSERT INTO Name (ID, Name, GenderID)
    SELECT  s.id, s.name, g.id
    FROM    Staging s
            INNER JOIN Gender g
                ON s.gender = g.gender
    

    是的,您需要
    插入到…选择
    。通过列
    Gender
    将表
    staging
    Gender
    连接,这样您就可以获得
    ID

    INSERT INTO Name (ID, Name, GenderID)
    SELECT  s.id, s.name, g.id
    FROM    Staging s
            INNER JOIN Gender g
                ON s.gender = g.gender
    
    哦:)我不知道执行连接不需要建立关系。我喜欢这个网站,谢谢。哦:)我不知道不需要建立关系就可以执行加入。我喜欢这个网站,谢谢。