2015-01-03 2 views
0

조인 사용하여 이름, 성을 나열하고 학생들이 자바 기본 모듈에 등록의 시작 날짜 : 아래의 쿼리를 실행할 때 좀 문제가 있어요에 합류 세 개의 테이블이 함께 내부는 테이블 별칭을 사용

.

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

철자가 틀린 것 같습니다 모듈 코드가 모듈 이름과 같을 경우 매우 놀랍습니다. 그렇지 않으면'Module' 테이블에 전혀 참여할 필요가 없습니다. 그래서 나는 이것보다는 : '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