SQL 连接 3 个数据库

问题描述 投票:0回答:1

我最后正确连接了一个表“FinalData”,它应该带来右连接表的所有值和内连接表的匹配值 但由于内部联接值为空,因此在拉取记录时会产生 0 行

SELECT G.Regno AS MCQ_Regno, G.SNO AS RNO, f.RegNo AS StuRegNo, ' ' as StuName, h.[Dcode] AS Prcode, 
h.[P] AS Crcode, h.[Department_code] AS DeptCode,  h.[Sub_exam_code] AS SubExCode, ' ' AS AssTyp, h.[Name_of_exam_code] AS ExmCode, 
'E' + CONVERT(VARCHAR(10), c.EvaluationType) AS eval, G.TotalMark AS MCQ_Mark, D.TotalMarks AS Descriptive_Mark,'' AS Mark,
'M1'Ty,g.Project_ID,g.SRNO,'Both_MCQ&Descriptive' as SelectedType 
FROM DB1.dbo.Booklet A INNER JOIN DB1.dbo.Subject AS B ON B.ID = A.SubjectID 
INNER JOIN DB1.dbo.Ets AS C ON C.BID = A.ID AND C.SubjectID = A.SubjectID 
INNER JOIN DB1.dbo.Bks AS D ON D.BID = C.BID AND D.SubjectID = C.SubjectID AND D.EvaluatorID =C.Evaluator 
INNER JOIN DB1.dbo.DataSync AS E ON E.SubjectID = B.ID 
INNER JOIN DB1.dbo.RollNo AS F ON f.be = a.ID AND f.mcode = b.Code 
INNER JOIN DB2.dbo.STU_Master AS h ON h.regno= f.RegNo and h.sno= f.MCode 
RIGHT JOIN (SELECT Regno, SNO, TotalMark,Project_ID FROM 'FinalData') AS G ON G.regno = f.RegNo AND G.SNO = f.mcode  
WHERE h.sno = 35417
sql sql-server
1个回答
0
投票

使用可能的步骤来理解问题:

  1. 根据连接逐一运行查询,并尝试了解确切的问题。
  2. 不要使用任何类型的右连接和末端。这不是纠正代码的好方法。如果有必要,则将其用作基表(第一个表)。在任何 INNER 连接之后,您可以使用 Left Join 或 INNER Join。
  3. 为什么加入后要使用这个条件? 使用整体数据的视图表,然后添加您的条件,例如:
 With T1 as (
     SELECT 
         G.Regno AS MCQ_Regno, 
         G.SNO AS RNO, 
         f.RegNo AS StuRegNo, ' ' as StuName, 
         h.[Dcode] AS Prcode, 
         h.[P] AS Crcode, 
         h.[Department_code] AS DeptCode,  
         h.[Sub_exam_code] AS SubExCode, 
         ' ' AS AssTyp, 
         h.[Name_of_exam_code] AS ExmCode, 
         'E' + CONVERT(VARCHAR(10), 
         c.EvaluationType) AS eval, 
         G.TotalMark AS MCQ_Mark, 
         D.TotalMarks AS Descriptive_Mark,
         '' AS Mark,
         'M1'Ty,g.Project_ID,g.SRNO,
         'Both_MCQ&Descriptive' as SelectedType 
     FROM 
         DB1.dbo.Booklet A 
         INNER JOIN 
         DB1.dbo.Subject AS B 
             ON B.ID = A.SubjectID 
         INNER JOIN 
         DB1.dbo.Ets AS C 
             ON C.BID = A.ID 
             AND C.SubjectID = A.SubjectID 
         INNER JOIN DB1.dbo.Bks AS D 
             ON D.BID = C.BID 
             AND D.SubjectID = C.SubjectID 
             AND D.EvaluatorID =C.Evaluator 
         INNER JOIN DB1.dbo.DataSync AS E 
             ON E.SubjectID = B.ID 
         INNER JOIN DB1.dbo.RollNo AS F 
             ON f.be = a.ID 
             AND f.mcode = b.Code 
         INNER JOIN DB2.dbo.STU_Master AS h 
             ON h.regno= f.RegNo 
             AND h.sno= f.MCode 
         RIGHT JOIN (SELECT Regno, SNO, TotalMark,Project_ID FROM 'FinalData') AS G 
             ON G.regno = f.RegNo 
             AND G.SNO = f.mcode 
 ) 
 select * from T1 
     where sno = 35417

希望您的问题能够得到解决 谢谢你

© www.soinside.com 2019 - 2024. All rights reserved.