我在视图中使用了7个表。例如,我将使用这些作为我的表名(表中的字段对于这个主键,表示主键是表名+ ID)
表1。 教师
表2。 学生(例外 - 学生中包含所有其他6个表中的所有ID)
表3。 科学
表4。 数学
表5。 历史
表6。 德国
表7。 语言艺术
现在,3-7中的所有表格都与表2中的学生有关系。学生与老师有关系。
如果我的任何表格都有任何字段,我的视图目前有效。
,有些可以为空,如果我的表3-7中的任何一个完全为空,它也会起作用。然而,我目前的问题是,如果我的老师没有分配给他们的学生,使表2-7为空,空等等....我的查询甚至不返回填写的教师信息...姓名,姓氏,出生日期等。
我该如何完成这个?
我尝试从所有表中做所有左连接,因为老师可以有空字段,我尝试从dbo.Teacher做内部连接作为教师内部加入dbo.Student在dbo.Student.TeacherID = Teacher.TeacherID但是那不起作用..我不知所措......
SELECT Teacher.TeacherID ,
Student.StudentID ,
Science.ScienceID ,
History.HistoryID ,
Math.MathID ,
German.GermanID ,
LanguageArts.LanguageArtsID
FROM dbo.Teacher AS Teacher
LEFT OUTER JOIN dbo.Student
ON dbo.Student.TeacherID = Teacher.TeacherID
LEFT OUTER JOIN dbo.Science AS Science
ON dbo.Student.ScienceID = Science.ScieneID
LEFT OUTER JOIN dbo.Math AS Math
ON dbo.Student.MathID = Math.MathID
LEFT OUTER JOIN dbo.History AS History
ON dboStudent.HistoryID = History.HistoryID
LEFT OUTER JOIN dbo.German AS German
ON dbo.Student.GermanID = German.GermanID
LEFT OUTER JOIN dbo.LanuageArts AS LanguageArts
ON dbo.Student.LanguageArtsID = LanguageArts.LanguageArtsID
答案 0 :(得分:0)
两条评论:
SELECT * 来自老师t LEFT JOIN学生s on s.teacher_id = t.id
(如果你想要所有学生,即使他们没有老师,也可以使用RIGHT JOIN)
SELECT * FROM teacher t, student s WHERE s.teacher_id = t.id
答案 1 :(得分:0)
我想出了我的答案,在我的选择中,我使用的是dbo.Student.TeacherID,而不是dbo.Teacher.TeacherID,因此我的查询总是以null TeacherID值返回,因为我用一个查询检查我的视图这一个
Select * from MyView Where TeacherID = 1;
这返回null,因为我的选择是拉动Student.TeacherID为null,所以我为dbo.Teacher.TeacherID交换了dbo.Student.TeacherID,现在它已经解决了。
这么好的时刻。感谢您的评论和回复。!
当我在我的OP中回顾时,我说我正在选择
SELECT Teacher.TeacherID ,
Student.StudentID ,
这在技术上是一个错字,但也是我的答案......