架构帮助;通过连接更新; SQL

时间:2014-05-07 16:10:04

标签: sql

下面是我输入的一些代码以及与所述代码有关的一些注释,我试图提供所涉及的三个表的详尽描述。

这是我用来“链接”完成此过程所涉及的三个表的select / join。

select * from SMI.dbo.API api
left outer join FM.dbo.MP mpi on api.PEIDS = mpi.PEID
inner join SMI.dbo.SIP sip on mpi.FIDID = sip.FIDID

API-有PEID,MaidenName,DOB和出生地

MP或MPI-具有PEID,FIDID,FI,MI和姓氏的新娘&新郎。

SIP-有一个FIDID,这是目的地表

在API中,每条记录都有一个人的PEID,以及他们的婚前姓(如果他们是女性)他们的DOB,以及他们的出生地。此表中还包括“性别”字段..(I.E. M,F,U)

在MPI字段中,每个记录对每个人都有相同的PEID;但它也包含一个与每个记录相关联的FIDID。因此,在此表中,您会发现总记录数几乎是其他两个表总数的两倍。这是因为您收到了新娘和新郎的记录。

在SIP中,您将找到与每次婚姻有关的大部分索引信息,最重要的是FIDID。

范围:此查询的最终目标是将MaidenName,BirthDates和BirthPlaces插入SIP表,同时区分M& F。

话虽如此,由于目标表(SIP)和源表(API)之间没有直接链接,我觉得加入API和 (MPI)将是“弥合”这一差距的最佳方法。

由于我只有一个PEID,我需要查看“性别”字段,以确定特定记录是否与新娘或新郎(M或F)有关,找到特定记录的PEID&性别,然后查询应该继续下一步通过PEID从(MPI)定位FIDID,然后它应该相应地将MaidenName,BirthDates和BirthPlaces插入SIP。

我意识到下面代码的语法完全不受欢迎。我主要是在试图想象我需要做什么的时候输入它。

USE [SMI]
GO
SELECT  * from SMI.dbo.API api
left outer join FM.dbo.MPI mpi on api.PEIDS = mpi.PEID
inner join SMI.dbo.SIP sip on mpi.FIDID = sip.FIDID   
  CASE 
  ((( WHEN api.PEIDs = mpi.PEID and mpi.FIDID = sip.FIDID 
   (THEN 
   Update SIP
     set groomdob = api.birthdate, GroomBirthPlace = api.birthplace
     where api.gender like 'M')  
     and
     ((Update SIP
     set bridedob = api.birthdate, BrideBirthPlace = api.birthplace, BrideMaidenName = api.birthlastname
    where api.gender like 'F' ))
     ELSE null)))
       END
FROM SMI.dbo.API api
ORDER BY PEIDs ;
GO

提前感谢你们所提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

UPDATE SMI.dbo.SIP s
inner join (select * from SMI.dbo.API api
left outer join FM.dbo.MP mpi on api.PEIDS = mpi.PEID
inner join SMI.dbo.SIP sip on mpi.FIDID = sip.FIDID WHERE api.gender like 'm') m
on s.FID = m.FID
SET s.groomdob = m.birthdate, s.GroomBirthPlace = m.birthplace

UPDATE SMI.dbo.SIP s
inner join (select * from SMI.dbo.API api
left outer join FM.dbo.MP mpi on api.PEIDS = mpi.PEID
inner join SMI.dbo.SIP sip on mpi.FIDID = sip.FIDID WHERE api.gender like 'f')  as f 
on f.FID = s.FID   
set s.bridedob = f.birthdate, s.BrideBirthPlace = f.birthplace, 
s.BrideMaidenName =f.birthlastname