Sql server 完全外部联接从外键表返回空值

Sql server 完全外部联接从外键表返回空值,sql-server,tsql,join,outer-join,Sql Server,Tsql,Join,Outer Join,我正在开发一个名为“考查数据库测试”的数据库。目标是管理学生考试数据。但是,在进入考试系统之前,我们需要管理学生的基本数据,例如班级、部门、小组等 我制作了以下表格: 学生(包含学生数据) 类(包含类) 组(包含组) 节(包含节) PrimaryData(包含所有这些表的外键) 以下是表格设计: 学生: 类别: 集团 章节 主要数据: 以及这些表格中的数据: 学生: 类别: 组: 部分: PrimaryData:(它是空的,因为这些都是上表的外键!) 数据库图: 这里的

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

我制作了以下表格:

  • 学生(包含学生数据)
  • 类(包含类)
  • 组(包含组)
  • 节(包含节)
  • PrimaryData(包含所有这些表的外键)
以下是表格设计:

学生:

类别:

集团

章节

主要数据:

以及这些表格中的数据:

学生:

类别:

组:

部分:

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

数据库图:

这里的目标是使用学生卷编号选择学生的所有数据
我尝试了以下查询:

SELECT * FROM Student Full Outer Join PrimaryData ON PrimaryData.StuID=Student.StuRollNo where Student.StuRollNo='1001';
SELECT * FROM Student Join PrimaryData ON PrimaryData.StuID=Student.StuRollNo where Student.StuRollNo='1001';
下面是它返回的结果:

输出中必须包含组名、类名和节名

我已经尝试了StackOverflow上关于连接的大多数解决方案 但这一结果一直是一样的


请帮我解决这个问题

我看到StuRollNo是int,但您将“1001”作为字符串。

我看到StuRollNo是int,但您将“1001”作为字符串。

PrimaryData表是基于ERD的学生与部分、类和组之间的映射表。在primarydata中没有数据的情况下,您如何期望学生的节、类和组数据

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

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

添加此条目后,修改查询并添加节、类和组主表以获取名称。

PrimaryData表是基于ERD的学生和节、类和组之间的映射表。在primarydata中没有数据的情况下,您如何期望学生的节、类和组数据

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'
将记录插入primarydata表。这对你有用

insert into primarydata values (1001,'FSC1',1001,'Engg')
添加此条目后,请修改查询并添加节、类和组主表以获取名称

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'
由于列之间没有匹配,请尝试使用显式联接,如左外联接


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

样本数据最好作为+。请阅读的已接受答案和您的问题,以包括适当的样本数据、您当前的尝试和您期望的结果。PrimaryData表是基于您的ERD的学生与部门、班级和小组之间的映射表。在primarydata中没有数据的情况下,您如何期望学生的节、类和组数据?@ASP基本数据中应该包含哪些数据?您需要创建一行,如(1001,fsc1101,Engg)@ASP这意味着我必须为所有记录创建行?示例数据最好作为+。请阅读的已接受答案和您的问题,以包括适当的样本数据、您当前的尝试和您期望的结果。PrimaryData表是基于您的ERD的学生与部门、班级和小组之间的映射表。在primarydata中没有数据的情况下,您如何期望学生的节、类和组数据?@ASP基本数据中应该包含哪些数据?您需要创建一行,如(1001,fsc1101,Engg)@ASP这意味着我必须为所有记录创建行?结果仍然相同!!您仍然没有primaryData表上的数据,它将返回null,最好的修复方法是直接使用显式连接语句连接其他表,直到相同的结果!!您仍然没有primaryData表上的数据,它将返回null,最好的修复方法是直接使用explicity join STATINTSHOW连接其他表,以检索针对这些ID(主键)而不是ID本身的数据?如何检索针对这些ID(主键)而不是ID本身的数据?