簡體   English   中英

使用內部連接作為多個表的別名

[英]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)

Output 或第一個查詢是這樣的(示例):

'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.'

我希望 output 是這樣的:

'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.'

樣本數據

感謝@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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM