从mssql中的1个表创建3个表

时间:2014-07-27 17:44:16

标签: sql-server

我正在创建一个赛马数据数据库。数据从网络中删除,转换为excel,然后转换为MS SQL数据库中的单个表Race_Master

列包含以下数据:

date
pos
odds
btnby
going
horsename
trainername
jockeyname

当然,马匹,骑师和训练师的名字以低效且非关系的方式存储,有许多重复的条目。所以我创建了3个新表:

horse_name
trainer_name
jockey_name

这些表中没有重复项。

我现在如何创建一个新表来获取Race_Master的数据,而不是使用马匹训练师和骑师的名字,参考那些相应的表格并使用他们的身份证作为参考?

2 个答案:

答案 0 :(得分:1)

如果你已经创建了一个表,那么......

INSERT INTO NewTable (MasterID, JockeyID, TrainerID, HorseID)
SELECT M.MasterID, J.JockeyID, T.TrainerID , H.HorseID
FROM Race_Master M
INNER JOIN  Jockeys J   ON M.JockeyName = J.JockeyName
INNER JOIN  Trainer T   ON M.TrainerName = T.TrainerName
INNER JOIN  Horse   H   ON M.HorseName   = H.HorseName

如果您想动态创建表格

SELECT M.MasterID, J.JockeyID, T.TrainerID , H.HorseID
  INTO New_Table
FROM Race_Master M
INNER JOIN  Jockeys J   ON M.JockeyName = J.JockeyName
INNER JOIN  Trainer T   ON M.TrainerName = T.TrainerName
INNER JOIN  Horse   H   ON M.HorseName   = H.HorseName

答案 1 :(得分:0)

创建表格:

create table dbo.Race(
     ID    int identity not null primary key
    ,JockeyID  int references dbo.Jockey(ID)
    ,HorseID   int references dbo.Horse(ID)
    ,TrainerID int references dbo.Trainer(ID)
)
go

并插入行:

with 
jockey as (
    select JockeyID 
    from dbo.Jockey j
    join dbo.Race_Master 
      on Race_Master.JockeyName = j.JockeyName
),
trainer as (
    select TrainerID 
    from dbo.Trainer t
    join dbo.Race_Master 
      on Race_Master.TrainerName = t.TrainerName
),
horse as (
    select HorseID 
    from dbo.HOrse h
    join dbo.Race_Master 
      on Race_Master.HorseName = h.HorseName
)
insert Race(JockeyID,HorseID,TrainerID)
select jockey.ID,horse.ID,trainer.ID;