0

我有父表和多个具有外键约束的子表。

School Table

School ID EduDetails Genders Address_id  EDUTYPE
  1        2          M         3         FGN

和子表一样

 Education Details
 EDU ID    EducationType
  2        Online

 AKA Name
 School Id   AKA Name
     1       Test School
     1       School Test

 Gender Table
 Gender ID   Gender Desc
      M      Male  

我正在为父母和学校表使用左外连接来获取结果。

但我的问题是,如果 AKA 表有 5 个与学校 ID 匹配的计数,而 Gender 表只有 1 个该学校 ID 的记录。

因此,结果带有 5 个重复行,其中包含学校信息和其他子表信息。

是否有任何解决方法来解决此问题。我尝试通过函数使用子查询和row_number。但这对我不起作用。谁能帮我解决这个问题。

提前感谢您花时间查看此问题。

我需要的输出应该是这样的

 School_id AKA Name     GenderDesc EductaionType
   1       Test School    Male       Online
   1       School Test          

所以我需要为不匹配的记录设置 Null 值。

4

1 回答 1

1

由于您想要 AKA Name 表中的所有记录,因此我加入了这一点,Row_Number为每一行获取一个。然后在其他桌子上Row_Number使用它。LEFT JOIN

SELECT S.SchoolId, 
  SA.AKAName,
  G.GenderName,
  ED.EducationType
FROM School s
  JOIN 
     (SELECT SchoolId, 
        AKAName, 
        ROW_NUMBER() OVER (PARTITION BY SchoolId ORDER BY AKAName) rn
      FROM SchoolAKA
      ) SA ON S.SchoolID = SA.SchoolId
  LEFT JOIN 
     (SELECT EDUID, 
        EducationType, 
        ROW_NUMBER() OVER (ORDER BY EducationType) rn
      FROM EduDetails
      ) ED ON S.EDUID = ED.EDUID AND SA.rn = ED.rn
  LEFT JOIN 
     (SELECT GenderId, 
        GenderName, 
        ROW_NUMBER() OVER (ORDER BY GenderName) rn
      FROM Genders
      ) G ON S.GenderId = G.GenderId AND SA.rn = G.rn

这是 SQL小提琴

结果如下:

SCHOOLID   AKANAME       GENDERNAME   EDUCATIONTYPE
1          School Test   Male         Online
1          Test School   (null)       (null)
于 2013-02-15T17:52:37.180 回答