2015-01-27 1 views
0

Result, ResultITems 및 GradeScale의 세 테이블을 조인해야했습니다. 내가 할 때, 나는 같은 줄의 두 배 또는 두 줄을 얻는다. 나는 sqlfiddle에서 레코드 만들기를 시도했지만 다른 정확한 결과를 얻는다. 내 로컬 sqlite db 테이블을 만드는 데 사용되는 스키마 정확히 여기에 표시됩니다 동일합니다.단일 레코드에 대해 double 행을 제공하는 범위에서 sql join

결과표

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) 
); 

그리고 gradescale 테이블 난 각 레코드에 대해, 다음 I 등의 두 행이 쿼리를 실행할 지금

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이다 여기에 이미지 설명을 입력합니다] 내 로컬 db에서 실행할 때 출력에?

+0

의 통지를 취할 수있는 SQL을 다시 썼다. –

+0

왜 LEFT JOIN을 수행하고 WHERE 절에 외부 테이블 조건이 있습니까? 그게 정기적으로 내부 조인 ... (BTW, 결과 및 좋은 테이블 이름을 설명하는 무엇입니까?)? – jarlh

+0

@ GordonLinoff 내가 무슨 뜻인지 이해가 안 돼 – Smith

답변

1

@ JotaBet의 도움으로, 각 등급 그룹의 각 학년 문자에 대해 두 번 입력 한 GradeScale 테이블에 오류를 추적 할 수있었습니다.

그래서 나는 모든 가능성에, 당신은 테이블 중 하나에 중복이 그

left join GradeScale g 
ON (AND c.classcatid = g.classcatid (ri.total >= g.minscore AND ri.total <= g.maxscore)) 
관련 문제