【发布时间】:2014-03-19 16:47:42
【问题描述】:
我在一个视图中使用了 7 个表。例如,我将使用这些作为我的表名(表中的字段与此无关,除了 PrimaryKey 是 tableName + 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
【问题讨论】:
-
如果您包含您的实际查询,人们会更容易提出具体的改进建议。
-
FULL OUTER JOIN, LEFT JOIN 并注意您的 where 子句标准。您可能需要将其移至联接,或者在它们上使用 or 语句的组合来处理
(Field = 'X' OR field is Null)如果您只有 where Field = 'X' 您刚刚使外部联接无效,因为没有字段将有 X 如果没有匹配记录!
标签: sql sql-server join ssms