2013-05-03 46 views
1

我已经创建了用于组合一个到多个表的插入查询并将值取为单个值。结合一个到多个表并获取值

表1:

CandidateQualifications:

  • 标识
  • CandidateId
  • DegreeId
  • 专业化

表2:

UG_list

  • 标识
  • Ugname

表3:

PG_list

  • 标识
  • pgname

表4:

Docorate_List

  • 标识
  • Ugname

这些都表ID被称为跟踪表,

CandidateDetails

  • 资格
  • Postgraduation
  • 博士学位

它显示了独立的程度在这candidatedetails表。当我使用跟踪查询时,我只获得限定值。其他人被淘汰。所以如果有3度,那么候选人ID显示3次。但只有一次显示。

我的查询,

SELECT top(50) 'INSERT INTO CandidateQualifications(candidateId,DegreeId,specialization) VALUES('+ 
Cast(c.CandidateID as varchar(50))+',''' + 
ISNULL(Cast(Coalesce(u.Id,p.Id,d.Id)as varchar(50)),'NULL')+','+ 
IsNull(''''+c.ugspecification+'''', 'NULL')+')' 
    FROM candidatedetails as c 
    LEFT join UG_List As u ON c.qualification=u.UGName 
    LEFT join PG_List As p ON c.PostGraduation=p.PGName 
    LEFT join Docorate_List As d ON c.Doctorate=d.Doctorate 

结果集

INSERT INTO CandidateQualifications(candidateId,DegreeId,specialization) VALUES(2,'38,'Hotel Management') 

INSERT INTO CandidateQualifications(candidateId,DegreeId,specialization) VALUES(3,'17,'HMCT (Hotel Management& Catering technology)') 

请帮助我的人出来这个问题?

+0

任何人都有关于这个的想法? – Duk 2013-05-03 05:31:55

+1

请提供一些明确的信息 – Anvesh 2013-05-03 06:12:02

+0

您能举个例子吗?(测试数据) – 2013-05-03 07:34:00

回答

0

在您的要求中存在一个根本性问题,那就是在您的表CandidateQualifications中您想要DegreeID,但您希望将其链接到3个表格。

一些示例性数据:

CandidateDetails

+--------------------------------------------------+ 
¦ ID ¦ Qualification ¦ Postgraduation ¦ doctorate ¦ 
¦----+----------------+----------------+-----------¦ 
¦ 1 ¦ Qualification1 ¦ PostGraduation1¦ doctorate1¦ 
¦ 2 ¦ Qualification2 ¦ PostGraduation2¦ doctorate2¦ 
¦ 3 ¦ Qualification3 ¦ PostGraduation3¦ doctorate3¦ 
+----+----------------+----------------+-----------+ 

UG_list

+---------------------+ 
¦ ID ¦  Ugname ¦ 
¦----+----------------¦ 
¦ 1 ¦ Qualification1 ¦ 
¦ 2 ¦ Qualification2 ¦ 
¦ 3 ¦ Qualification3 ¦ 
+----+----------------+ 

PG_list

+---------------------+ 
¦ ID ¦  pgname ¦ 
¦----+----------------¦ 
¦ 1 ¦ PostGraduation1¦ 
¦ 2 ¦ PostGraduation2¦ 
¦ 3 ¦ PostGraduation3¦ 
+----+----------------+ 

Docorate_List

+-----------------+ 
¦ ID ¦ dcname ¦ 
¦----+------------¦ 
¦ 1 ¦ doctorate1 ¦ 
¦ 2 ¦ doctorate2 ¦ 
¦ 3 ¦ doctorate3 ¦ 
+----+------------+ 

看来你要找在CandidateQualifications

+-----------------------------------------------+ 
¦ ID ¦ CandidateId ¦ DegreeId ¦ Specialization ¦ 
¦----+--------------+----------+----------------¦ 
¦ 1 ¦  1  ¦  1 ¦  Spec1  ¦ -- Qualification1 
¦ 2 ¦  1  ¦  1 ¦  Spec1  ¦ -- PostGraduation1 
¦ 3 ¦  1  ¦  1 ¦  Spec1  ¦ -- doctorate1 
¦ 4 ¦  2  ¦  2 ¦  Spec2  ¦ -- Qualification2 
¦ 5 ¦  2  ¦  2 ¦  Spec2  ¦ -- PostGraduation2 
¦ 6 ¦  2  ¦  2 ¦  Spec2  ¦ -- doctorate2 
¦ 7 ¦  3  ¦  3 ¦  Spec3  ¦ -- Qualification3 
¦ 8 ¦  3  ¦  3 ¦  Spec3  ¦ -- PostGraduation3 
¦ 9 ¦  3  ¦  3 ¦  Spec3  ¦ -- doctorate3 
+----+--------------+----------+----------------+ 
落得

麻烦的是,因为你的ID从三个不同的表,一旦你插入数据你无法知道它链接到哪一个。

如果不是太晚了,我建议改变你的数据结构类似如下:

QualificationType

+----+---------------+ 
¦ ID ¦  Name  ¦ 
¦----+---------------¦ 
¦ 1 ¦ UnderGraduate ¦ 
¦ 2 ¦ PostGraduate ¦ 
¦ 3 ¦ Doctorate ¦ 
+----+---------------+ 

+----+---------------------+-----------------+ 
¦ ID ¦ QualificationTypeID ¦  Name  ¦ 
¦----+---------------------¦-----------------¦ 
¦ 1 ¦  1   ¦ Qualifacation1 ¦ 
¦ 2 ¦  1   ¦ Qualifacation2 ¦ 
¦ 3 ¦  1   ¦ Qualifacation3 ¦ 
¦ 4 ¦  2   ¦ PostGraduation1 ¦ 
¦ 5 ¦  2   ¦ PostGraduation2 ¦ 
¦ 6 ¦  2   ¦ PostGraduation3 ¦ 
¦ 7 ¦  3   ¦ Doctorate1 ¦ 
¦ 8 ¦  3   ¦ Doctorate2 ¦ 
¦ 9 ¦  3   ¦ Doctorate3 ¦ 
+----+---------------------+-----------------+ 

然后你CandidateQualifation表可以引用QualifationID,那么你就知道了正是它所引用的。

所以你插入查询成为(我不知道在哪里专业化来自):

INSERT CandidateQualifation (CandidateID, DegreeID) 
SELECT cd.CandidateID, 
     dg.DegreeID 
FROM CandidateDetails cd 
     LEFT JOIN Degree ug 
      ON cd.qualification = ug.Name 
      AND cd.QualificationTypeID = 1 
     LEFT JOIN Degree pg 
      ON cd.PostGraduation = pg.Name 
      AND cd.QualificationTypeID = 2 
     LEFT JOIN Degree doc 
      ON cd.Doctorate = doc.Name 
      AND cd.QualificationTypeID = 3 
     OUTER APPLY 
     ( VALUES 
       (ug.ID), 
       (pg.ID), 
       (doc.ID) 
     ) dg (DegreeID); 

你可以使用类似

SELECT cd.CandidateID, 
     Qualification = Degree.Name, 
     QualificationType = qt.Name 
FROM CandidateDetails cd 
     INNER JOIN CandidateQualifications cq 
      ON cd.ID = cq.CandidateID 
     INNER JOIN Degree 
      ON Degree.ID = cq.DegreeID 
     INNER JOIN QualificationType qt 
      ON qt.ID = Degree.QualificationTypeID; 

让你qualifations然而,回答您的实际问题,您可以使用OUTER APPLY获得单独的资格作为分离行:

SELECT cd.CandidateID, 
     d.DegreeID 
FROM CandidateDetails cd 
     LEFT JOIN UG_List 
      ON cD.qualification = UG_List.UGName 
     LEFT JOIN PG_List As p 
      ON cd.PostGraduation = PG_List.PGName 
     LEFT JOIN Docorate_List As d 
      ON cD.Doctorate = Docorate_List.Doctorate 
     OUTER APPLY 
     ( VALUES 
       (UG_List.ID), 
       (PG_List.ID), 
       (UG_List.ID) 
     ) d (DegreeID);