2015-01-03 46 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