我需要加入三个表Result,ResultITems和GradeScale。当我这样做时,我得到同一行的两个或两个。我尝试在sqlfiddle中创建记录,但我得到了不同的正确结果。我在本地sqlite db中创建表时使用的模式完全相同,如下所示。
结果表
CREATE TABLE Result (
ID INTEGER PRIMARY KEY AUTOINCREMENT,
SubjectID INTEGER REFERENCES Subjects ( ID ) ON DELETE CASCADE,
SessionID INT REFERENCES Sessions ( ID ),
TermID INT REFERENCES terms ( ID ),
ClassID INTEGER REFERENCES Classes ( ID )
);
resultItems表
CREATE TABLE ResultItems (
StudentID INTEGER,
ResultID INTEGER REFERENCES Result ( ID ) ON DELETE CASCADE,
Total DECIMAL( 10, 2 )
);
等级表
CREATE TABLE gradeScale
(ID INTEGER PRIMARY KEY AUTOINCREMENT,
minscore tinyint NOT NULL,
maxscore tinyint NOT NULL,
grade char(1) NOT NULL,
ClassCatID INTEGER
);
现在当我执行下面的查询时,我为ResultItems表中的每条记录添加了一行
Select ri.studentid, ri.Total,g.grade
From ResultItems ri
left join GradeScale g
ON ( ri.total >= g.minscore AND ri.total <= g.maxscore )
left join Result r on r.id=ri.resultid
WHERE r.sessionid = 4
AND
r.termid = 1
AND
r.classid = 9
ORDER BY grade ASC;
请看下面的图片,看看我的意思 ![在此输入图像说明] [1]
这是我创建的http://sqlfiddle.com/#!7/ffb42/1
的sql fibble为什么我在本地数据库中执行时会在输出中获得双行?
答案 0 :(得分:1)
从@ JotaBet的帮助中,我能够将错误跟踪到GradeScale表,wihci为每个班级组的每个成绩单都有两个条目。
所以我重写了sql以注意到
left join GradeScale g
ON ( AND c.classcatid = g.classcatid (ri.total >= g.minscore AND ri.total <= g.maxscore) )