使用内部连接作为多个表的别名

Using inner join as ALIASES with multiple tables

下面有这些表格:

create table student(
    studentName      varchar (40) not null,
    studentRollNo    varchar (30) primary key, -- also acts as username
    studentPassword  varchar(30) NOT NULL,
    studentGender    varchar(7) default NULL
);
create table supervisors(
    supervisorID varchar(30) foreign key references Faculty(facultyID) unique,
    sWorkLoad int default null,
    CHECK (sWorkLoad<=6 and sWorkLoad>=0)
);
create table co_supervisors(
    co_supervisorID varchar(30) foreign key references Faculty(facultyID) unique,
    csWorkLoad int default null,
    CHECK (csWorkLoad<=6 and csWorkLoad>=0)
);
create table studentGroup(
    groupID int IDENTITY(1,1) primary key ,
    Member1rollNo varchar(30) foreign key references student(studentRollNo) default NULL, -- member 1
    Member2rollNo varchar(30) foreign key references student(studentRollNo) default NULL, -- member 2
    Member3rollNo varchar(30) foreign key references student(studentRollNo) default NULL, -- member 3
    supervID  varchar(30) foreign key references supervisors(supervisorID),
    co_supervID  varchar(30) foreign key references co_supervisors(co_supervisorID) default NULL,
    projectTitle varchar(100) not null,
    projectDetails varchar (500) default NULL
);
create table FYP1(
     groupID int foreign key references studentGroup(groupID),
);

我想显示在 FYP1 注册的学生详细信息。 与他们的主管 co_supervisors 和项目名称。

但是我做不到, 到目前为止我所做的就是这个。

select sg.Member1rollNo,S.studentName,Member2rollNo,S.studentName,sg.Member3rollNo,sg.supervID,sg.projectTitle
FROM student S
inner join studentGroup SG ON S.studentRollNo = SG.Member1rollNo

或者像这样随机尝试

--  Faculty.facultyName
SELECT FYP1.groupID, studentGroup.Member1rollNo,student.studentName as student1, studentGroup.Member2rollNo,student.studentName  as student2,studentGroup.projectTitle
FROM FYP1 as FYP1_Students
INNER JOIN studentGroup ON (studentGroup.groupID = FYP1_Students.groupID)
INNER JOIN supervisors  ON (studentGroup.supervID = supervisors.supervisorID)
INNER JOIN student      ON (student1.studentRollNo = studentGroup.Member1rollNo)
INNER JOIN student      ON (student.studentRollNo = studentGroup.Member2rollNo)

输出或第一个查询是这样的(示例):

'i19-0434'  'Sourav Malani' 'i19-0498'  'Sourav Malani' NULL    'urooj.ghani'   'Indoor Navigation'
'i19-0466'  'Aftab Ali' 'i19-0528'  'Aftab Ali' NULL    'urooj.ghani'   'AI based Physics exp.'

我希望输出如下:

'i19-0434'  'Sourav Malani' 'i19-0498'  'Student2 Name' NULL    'urooj.ghani'   'Indoor Navigation'
'i19-0466'  'Aftab Ali' 'i19-0528'  '<student2Name>'    NULL    'urooj.ghani'   'AI based Physics exp.'

Sample Data

感谢@Hana,我解决了这个问题。 解决方法如下:

SELECT SG.groupID,
       SG.Member1rollNo,S1.studentName as 'student1  Name',
       SG.Member2rollNo, S2.studentName as 'student2 Name',
       SG.Member3rollNo, S3.studentName as 'Studen3  Name',
       SG.supervID, SN.facultyName as 'Supervisor Name',
       SG.co_supervID, CSN.facultyName as 'Co_Supervisor',
       SG.projectTitle as 'Project Title',
       SG.projectDetails as 'Project Desc.'
FROM FYP1 FYP1
    LEFT OUTER JOIN studentGroup SG ON FYP1.groupID = SG.groupID 
    LEFT OUTER JOIN supervisors SV ON SG.supervID  = SV.supervisorID
    LEFT OUTER JOIN Faculty SN ON   SG.supervID= SN.facultyID
    LEFT OUTER JOIN Faculty CSN ON   SG.co_supervID= CSN.facultyID
    LEFT OUTER JOIN student S1 ON SG.Member1rollNo  = S1.studentRollNo
    LEFT OUTER JOIN student S2 ON SG.Member2rollNo  = S2.studentRollNo
    LEFT OUTER JOIN student S3 ON SG.Member3rollNo  = S3.studentRollNo

这是您要找的吗?

SELECT SG.groupID, SV.supervisorID, CSV.co_supervisorID, S1.studentName, S2.studentName, S3.studentName  
FROM FYP1 FYP1
    INNER JOIN studentGroup SG ON FYP1.groupID = SG.groupID 
    INNER JOIN supervisors SV ON SG.supervID  = SV.supervisorID
    INNER JOIN co_supervisors CSV ON SG.co_supervID = CSV.co_supervisorID
    INNER JOIN student S1 ON SG.Member1rollNo  = S1.studentRollNo
    INNER JOIN student S2 ON SG.Member1rollNo  = S2.studentRollNo
    INNER JOIN student S3 ON SG.Member1rollNo  = S3.studentRollNo