2015-01-03 49 views
0

使用表的别名,列出的第一个名字,姓氏和启动学生入学java的基础模块上日期:连接三个表一起使用内部联接

运行下面的查询时,我遇到了一些麻烦。

SELECT stu.StudFName, stu.StudLName, enrol.StartDate 
From Student stu 
INNER JOIN Enrolment enrol 
ON stu.StudID = enrol.StudID 
INNER JOIN Module mod 
ON enrol.ModCode = mod.ModCode 
WHERE mod.ModName = 'Java Fundamentals' 

结构:

CREATE TABLE Student 
(StudID  INTEGER  PRIMARY KEY, 
StudFName VARCHAR(10) NOT NULL, 
StudLName VARCHAR(10) NOT NULL, 
DoB   DATE   NOT NULL, 
Sex   CHAR(1)  NOT NULL CHECK (Sex IN ('M', 'F')), 
Email  VARCHAR(30) UNIQUE); 


CREATE TABLE Staff 
(StaffID  INTEGER  PRIMARY KEY, 
Title  VARCHAR(4) CHECK (Title IN ('Prof', 'Dr', 'Mr', 'Mrs', 'Miss')), 
StaffFName VARCHAR(10) NOT NULL, 
StaffLName VARCHAR(10) NOT NULL, 
Email  VARCHAR(30) UNIQUE, 
Department VARCHAR(25) DEFAULT 'Not Assigned', 
Extension INTEGER  CHECK (Extension BETWEEN 0001 AND 9999)); 


CREATE TABLE Module 
(ModCode  CHAR(4)  PRIMARY KEY, 
ModName  VARCHAR(25) NOT NULL, 
ModCredits INTEGER  NOT NULL CHECK (ModCredits IN (15, 30, 45, 60)), 
ModLevel  CHAR(3)  NOT NULL CHECK (ModLevel IN ('UG1', 'UG2', 'UG3', 'MSc')), 
ModLeader INTEGER  NOT NULL, 
Foreign Key (ModLeader) REFERENCES Staff (StaffID)); 


CREATE TABLE Enrolment 
(ModCode  CHAR(4)  NOT NULL, 
StudID  INTEGER  NOT NULL, 
StartDate DATE   NOT NULL, 
PRIMARY KEY (ModCode, StudID), 
Foreign Key (StudID) REFERENCES Student (StudID),   
Foreign Key (ModCode) REFERENCES Module (ModCode)); 
+2

你得到什么错误?它看起来像你拼错学生 – Aheho

+1

显示表结构 – Sathish

+3

如果模块代码打算与模块名称相同,我会非常惊讶 - 否则根本不需要连接到“模块”表。所以我怀疑,而不是这个:'ON enrol.ModCode = mod.ModName'你的意思是:'ON enrol.ModCode = mod.ModCode'。 –

回答

0

答案是...没有与您的查询没有问题。

它工作得很好。 检查here

INSERT INTO Student (StudID, StudFName, StudLName, DoB, Sex, Email) VALUES 
(1, 'Jack', 'Black', TO_DATE('2015/01/01', 'yyyy/mm/dd'), 'M', '[email protected]'); 
INSERT INTO Student (StudID, StudFName, StudLName, DoB, Sex, Email) VALUES 
(2, 'Andrew', 'Wiggin', TO_DATE('2015/01/01', 'yyyy/mm/dd'), 'M', '[email protected]'); 
INSERT INTO Student (StudID, StudFName, StudLName, DoB, Sex, Email) VALUES 
(3, 'Bob', 'Marley', TO_DATE('2015/01/01', 'yyyy/mm/dd'), 'M', '[email protected]'); 

INSERT INTO Staff (StaffID, Title, StaffFName, StaffLName, Email, Extension) VALUES 
(1, 'Prof', 'Joe', 'Smith', '[email protected]', 0001); 

INSERT INTO Module (ModCode, ModName, ModCredits, ModLevel, ModLeader) VALUES 
(1, 'Java Fundamentals', 30, 'UG1', 1); 
INSERT INTO Module (ModCode, ModName, ModCredits, ModLevel, ModLeader) VALUES 
(2, 'C# Fundamentals', 15, 'UG2', 1); 

INSERT INTO Enrolment (ModCode, StudID, StartDate) VALUES 
(1, 1, TO_DATE('2015/01/01', 'yyyy/mm/dd')); 
INSERT INTO Enrolment (ModCode, StudID, StartDate) VALUES 
(1, 2, TO_DATE('2015/01/02', 'yyyy/mm/dd')); 
INSERT INTO Enrolment (ModCode, StudID, StartDate) VALUES 
(2, 3, TO_DATE('2015/01/03', 'yyyy/mm/dd')); 

------------------------------------------------------------- 
SELECT stu.StudFName, stu.StudLName, enrol.StartDate 
From Student stu 
INNER JOIN Enrolment enrol ON stu.StudID = enrol.StudID 
INNER JOIN Module mod ON enrol.ModCode = mod.ModCode 
WHERE mod.ModName = 'Java Fundamentals' 

结果

STUDFNAME STUDLNAME STARTDATE 
---------------------------------------- 
Jack  Black  January, 01 2015 
Andrew  Wiggin  January, 02 2015