FULL OUTER JOIN从外键表返回NULL值

时间:2018-05-08 06:10:17

标签: sql-server tsql join outer-join

我正在开发名为“ExaminationDB_Test”的数据库。目标是管理学生考试数据。但是,在我们进入考试系统之前,我们需要管理学生的基本数据,例如班级,科,组等。

我制作了以下表格:

  • 学生(包含学生资料)
  • 类(包含类)
  • 群组(包含群组)
  • 章节(包含章节)
  • PrimaryData(包含所有这些表的外键)

以下是表格设计:

学生:

Student Table Design

类别:

Class Table Design

群组

Group Table Design

Section Table Design

主要数据:

Primary Data Table Design

这些表中的数据:

学生:

Student Table Data

类别:

Class Table Data

组:

Groups Table Data

节:

Sections Table Data

PrimaryData:(它是空的,因为这些都是上面表的外键!)

PrimaryData Table Data

数据库图表:

Database Diagram

此处的目标是使用学生名单选择学生的所有数据。
我尝试了以下查询:

val vertexRDD: RDD[(VertexId, String)] = graph.vertices.filter{
    case (_, (str)) =>
        scala.util.Try(str.toInt).isSuccess        
}

这是它的回报: Query Result

输出必须包含组名,类名和部分名称!

  

我在StackOverflow上尝试了大多数关于 JOINS 的解决方案   但这个结果总是一样的。

请帮我解决这个问题!

3 个答案:

答案 0 :(得分:1)

PrimaryData表是基于您的ERD在学生与科,班级和组之间的映射表。在没有primarydata数据的情况下,您如何期待学生的科,班和组数据?

将记录插入primarydata表。这对你有用。

insert into primarydata values (1001,'FSC1',1001,'Engg')

添加此条目后,修改您的查询并添加section,class和group master table以获取名称。

答案 1 :(得分:1)

SELECT * FROM Student cross Join PrimaryData ON PrimaryData.StuID=Student.StuRollNo  where Student.StuRollNo='1001';

select E.* 
FROM   Student E
       CROSS JOIN PrimaryData P
WHERE  P.StuID = E.StuRollNo  
and E.StuRollNo = '1001'

由于列之间没有匹配,请尝试使用左外连接等显式连接。

答案 2 :(得分:0)

我看到StuRollNo是int,但你把' 1001'作为字符串。