2013-04-14 4 views
2

초등 학교를 대표하는 간단한 데이터베이스를 프로그래밍하려고 할 때 코드를 컴파일하려고 할 때이 오류가 발생했습니다.SQLite "오류 : 'studentID'열을 찾을 수 없습니다."

ATTENDS 테이블에 INSERT하려고하면 오류가 발생합니다.

다른 모든 것이 제대로 작동하기 때문에 오류를 찾지 못하는 것 같습니다. 또한 모든 트리거를 제거하면 오류가 발생하여 문제가되지 않습니다.

어떤 도움을 주시면 감사하겠습니다.

CREATE TABLE IF NOT EXISTS Student(
    id INTEGER PRIMARY KEY AUTOINCREMENT, 
    name TEXT NOT NULL, 
    lastName TEXT NOT NULL, 
    gender TEXT COLLATE NOCASE NOT NULL , 
    DOB TEXT NOT NULL, 
    address TEXT NOT NULL, 
    grade TEXT NOT NULL, 
    /* Checks */ 
    CHECK(gender IN ("m", "f", "o")), 
    CHECK(grade IN("K", "1", "2", "3", "4", "5", "6")) 
); 
CREATE TABLE IF NOT EXISTS Course(
    id INTEGER PRIMARY KEY AUTOINCREMENT, 
    name TEXT NOT NULL, 
    grade TEXT COLLATE NOCASE NOT NULL, 
    /* Checks */ 
    CHECK(grade IN("K", "1", "2", "3", "4", "5", "6")) 
); 

CREATE TABLE IF NOT EXISTS Attends(
    studentID INTEGER, 
    courseID INTEGER, 
    gradePoints TEXT COLLATE NOCASE, 
    FOREIGN KEY(studentID) REFERENCES Student(id), 
    FOREIGN KEY(courseID) REFERENCES Course(id), 
    /* Checks */ 
    CHECK(gradePoints ISNULL OR gradePoints IN ("A", "B", "C", "D", "E")), 
    UNIQUE(studentID, courseID) 
); 


CREATE TRIGGER IF NOT EXISTS sameGrade 
BEFORE INSERT ON Attends 
WHEN (SELECT grade FROM Student WHERE Student.id = studentID) <> (SELECT grade 
FROM Course Where Course.id = courseID) 
BEGIN 
    SELECT RAISE(ABORT,'The student’s grade does not match the course’s grade.'); 
END; 

CREATE TRIGGER IF NOT EXISTS changeGrade 
BEFORE UPDATE ON Student 
WHEN (NOT OLD.grade LIKE "K" AND NEW.grade LIKE "K") OR (NOT OLD.grade LIKE "K" AND NEW.grade < OLD.grade) 
BEGIN 
    SELECT RAISE(ABORT,'The student cannot go into a lower grade.'); 
END; 

CREATE TRIGGER IF NOT EXISTS max100Students 
BEFORE INSERT ON Attends 
WHEN 100 < (SELECT COUNT(*) FROM Attends WHERE courseID = NEW.courseID) 
BEGIN 
    SELECT RAISE(ABORT,'Courses cannot have more than 100 students.'); 
END; 


INSERT INTO Student(name,lastName,gender,DOB,address,grade) VALUES('Taylor','B','F','1992-04-25','123 1st ST','2'); 
INSERT INTO Student(name,lastName,gender,DOB,address,grade) VALUES('Taylor','B','F','1992-04-25','123 1st ST','2'); 
INSERT INTO Student(name,lastName,gender,DOB,address,grade) VALUES('Taylor','B','F','1992-04-25','123 1st ST','2'); 
INSERT INTO Student(name,lastName,gender,DOB,address,grade) VALUES('Taylor','B','F','1992-04-25','123 1st ST','2'); 
INSERT INTO Student(name,lastName,gender,DOB,address,grade) VALUES('Taylor','B','F','1992-04-25','123 1st ST','4'); 


INSERT INTO Course(name,grade) VALUES('Gym','K'); 
INSERT INTO Course(name,grade) VALUES('Gym','1'); 
INSERT INTO Course(name,grade) VALUES('Gym','2'); 
INSERT INTO Course(name,grade) VALUES('Gym','3'); 
INSERT INTO Course(name,grade) VALUES('Gym','4'); 
INSERT INTO Course(name,grade) VALUES('Gym','5'); 
INSERT INTO Course(name,grade) VALUES('Gym','6'); 

INSERT INTO Attends(studentID, courseID, gradePoints) VALUES(1,3,NULL); 
INSERT INTO Attends(studentID, courseID, gradePoints) VALUES(2,3,NULL); 
INSERT INTO Attends(studentID, courseID, gradePoints) VALUES(3,3,NULL); 
-- INSERT INTO Attends(studentID, courseID, gradePoints) VALUES(4,3,NULL); 
-- INSERT INTO Attends(studentID, courseID, gradePoints) VALUES(5,3,NULL); 
+1

무엇이 오류입니까? –

+1

학생 테이블에 StudentId Cloumn이없고 ID가 있습니다. 합리적인 오류입니다. –

+1

StudentID 열을 가지고 있지만 Attends 테이블에 추가하려고합니다. – user2280563

답변

1

문제는 동일한 그리드 트리거에 있습니다. NEW를 사용하여 행을 참조하는 것을 잊었습니다. "NEW"를 앞에 추가하십시오. "studentID"및 "courseID"열에 sqlite3이 당신이 말하는 것을 알 수 있도록 입력하십시오 :

CREATE TRIGGER IF NOT EXISTS sameGrade 
BEFORE INSERT ON Attends 
WHEN (SELECT grade FROM Student WHERE Student.id = NEW.studentID) <> (SELECT grade FROM Course WHERE Course.id = NEW.courseID) 
BEGIN 
    SELECT RAISE(ABORT,'The student’s grade does not match the course’s grade.'); 
END; 
관련 문제