Sql server SQL视图表联接混乱

Sql server SQL视图表联接混乱,sql-server,join,inner-join,outer-join,Sql Server,Join,Inner Join,Outer Join,所以 我有三张桌子 用户(Id、姓氏、姓氏) 课程(CourseId、CourseTile、教员) 课程登记(学生ID、课程ID、最终成绩) 现在,我应该: 使用 A.学生名 B学生姓氏 C课程名称 D教员姓名 E教员姓氏 F期末成绩 由于学生和教员的名字都存储在一个表(用户)中,我决定对学生的名字、学生的姓氏和课程名称进行临时查看 CREATE VIEW FirstView ([Student First Name],[Student Last Name],[Course Title])

所以

我有三张桌子

用户(Id、姓氏、姓氏)
课程(CourseId、CourseTile、教员)
课程登记(学生ID、课程ID、最终成绩)

现在,我应该: 使用
A.学生名
B学生姓氏
C课程名称
D教员姓名
E教员姓氏
F期末成绩

由于学生和教员的名字都存储在一个表(用户)中,我决定对学生的名字、学生的姓氏和课程名称进行临时查看

CREATE VIEW FirstView ([Student First Name],[Student Last Name],[Course Title])
    AS  

        SELECT Users.FirstName,Users.LastName, Courses.CourseTitle
                FROM Users
                INNER JOIN CourseEnrollment
                        ON CourseEnrollment.StudentId=Users.NTID
                INNER JOIN Courses
                        ON Courses.CourseId=CourseEnrollment.CourseId; 
为了完成主要工作,我正在创建一个新视图,如下所示:

SELECT FirstView.[Student First Name],FirstView.[Student Last Name],FirstView.[Course Title], Users.FirstName, Users.LastName, CourseEnrollment.FinalGrade
                FROM FirstView
                 JOIN Courses
                        ON Courses.CourseTitle LIKE FirstView.[Course Title]  -- only those courses which are there in first view
                 JOIN Users
                        ON Users.NTID LIKE Courses.Faculty   -- only the faculty users added
                 INNER JOIN CourseEnrollment
                        ON CourseEnrollment.CourseId LIKE Courses.CourseId;
问题是…如果我不添加最终成绩列并加入CourseRollment…它可以正常工作。但一旦我这么做了…它就变得一团糟,每个学生都排成了多行。用其他学生的分数


有人知道我如何解决这个问题吗?

如果课程表中的
教员
字段指的是用户,可能这就是您想要的:

MS SQL Server 2012架构设置

CREATE TABLE Users ( Id int , FirstName varchar(20), LastName varchar(20))
CREATE TABLE Courses ( CourseId int , CourseTitle varchar(20), Faculty int)
CREATE TABLE CourseEnrollment ( StudentId int, CourseId int, FinalGrade int)

INSERT Users VALUES (1, 'John', 'Adams')
INSERT Users VALUES (2, 'Steve', 'Student')
INSERT Users VALUES (3, 'Fred', 'Faculty')
INSERT Courses VALUES (1, 'DB 101', 3)
INSERT Courses VALUES (2, 'DB 201', 3)
INSERT CourseEnrollment VALUES (1,1,30)
INSERT CourseEnrollment VALUES (2,1,50)
INSERT CourseEnrollment VALUES (2,2,75)
SELECT
    u.FirstName AS [Student FirstName], u.LastName as [Student LastName],
    c.CourseTitle,
    faculty.FirstName AS [Faculty FirstName],
    faculty.LastName AS [Faculty LastName],
    ce.FinalGrade
FROM Users u
INNER JOIN CourseEnrollment ce ON u.Id = ce.StudentId
INNER JOIN Courses c ON c.CourseId = ce.CourseId
INNER JOIN Users faculty ON c.Faculty = faculty.Id
| STUDENT FIRSTNAME | STUDENT LASTNAME | COURSETITLE | FACULTY FIRSTNAME | FACULTY LASTNAME | FINALGRADE |
|-------------------|------------------|-------------|-------------------|------------------|------------|
|              John |            Adams |      DB 101 |              Fred |          Faculty |         30 |
|             Steve |          Student |      DB 101 |              Fred |          Faculty |         50 |
|             Steve |          Student |      DB 201 |              Fred |          Faculty |         75 |
查询1

CREATE TABLE Users ( Id int , FirstName varchar(20), LastName varchar(20))
CREATE TABLE Courses ( CourseId int , CourseTitle varchar(20), Faculty int)
CREATE TABLE CourseEnrollment ( StudentId int, CourseId int, FinalGrade int)

INSERT Users VALUES (1, 'John', 'Adams')
INSERT Users VALUES (2, 'Steve', 'Student')
INSERT Users VALUES (3, 'Fred', 'Faculty')
INSERT Courses VALUES (1, 'DB 101', 3)
INSERT Courses VALUES (2, 'DB 201', 3)
INSERT CourseEnrollment VALUES (1,1,30)
INSERT CourseEnrollment VALUES (2,1,50)
INSERT CourseEnrollment VALUES (2,2,75)
SELECT
    u.FirstName AS [Student FirstName], u.LastName as [Student LastName],
    c.CourseTitle,
    faculty.FirstName AS [Faculty FirstName],
    faculty.LastName AS [Faculty LastName],
    ce.FinalGrade
FROM Users u
INNER JOIN CourseEnrollment ce ON u.Id = ce.StudentId
INNER JOIN Courses c ON c.CourseId = ce.CourseId
INNER JOIN Users faculty ON c.Faculty = faculty.Id
| STUDENT FIRSTNAME | STUDENT LASTNAME | COURSETITLE | FACULTY FIRSTNAME | FACULTY LASTNAME | FINALGRADE |
|-------------------|------------------|-------------|-------------------|------------------|------------|
|              John |            Adams |      DB 101 |              Fred |          Faculty |         30 |
|             Steve |          Student |      DB 101 |              Fred |          Faculty |         50 |
|             Steve |          Student |      DB 201 |              Fred |          Faculty |         75 |

CREATE TABLE Users ( Id int , FirstName varchar(20), LastName varchar(20))
CREATE TABLE Courses ( CourseId int , CourseTitle varchar(20), Faculty int)
CREATE TABLE CourseEnrollment ( StudentId int, CourseId int, FinalGrade int)

INSERT Users VALUES (1, 'John', 'Adams')
INSERT Users VALUES (2, 'Steve', 'Student')
INSERT Users VALUES (3, 'Fred', 'Faculty')
INSERT Courses VALUES (1, 'DB 101', 3)
INSERT Courses VALUES (2, 'DB 201', 3)
INSERT CourseEnrollment VALUES (1,1,30)
INSERT CourseEnrollment VALUES (2,1,50)
INSERT CourseEnrollment VALUES (2,2,75)
SELECT
    u.FirstName AS [Student FirstName], u.LastName as [Student LastName],
    c.CourseTitle,
    faculty.FirstName AS [Faculty FirstName],
    faculty.LastName AS [Faculty LastName],
    ce.FinalGrade
FROM Users u
INNER JOIN CourseEnrollment ce ON u.Id = ce.StudentId
INNER JOIN Courses c ON c.CourseId = ce.CourseId
INNER JOIN Users faculty ON c.Faculty = faculty.Id
| STUDENT FIRSTNAME | STUDENT LASTNAME | COURSETITLE | FACULTY FIRSTNAME | FACULTY LASTNAME | FINALGRADE |
|-------------------|------------------|-------------|-------------------|------------------|------------|
|              John |            Adams |      DB 101 |              Fred |          Faculty |         30 |
|             Steve |          Student |      DB 101 |              Fred |          Faculty |         50 |
|             Steve |          Student |      DB 201 |              Fred |          Faculty |         75 |

非常感谢你。我整晚都在想办法。@rbk很乐意帮忙:)