에 상대가없는 레코드 선택 나는 4 개 테이블이 있습니다SQLite는 다른 테이블
CREATE TABLE People(
id integer primary key autoincrement,
'First Name' text,
'Last Name' text,
);
CREATE TABLE Courses(
id integer primary key autoincrement,
'Course Name' text,
'Course Refresh Rate' integer
);
CREATE TABLE [Course Enrolment](
'Person ID' integer,
'Course ID' integer,
FOREIGN KEY ('Person ID') REFERENCES People(id),
FOREIGN KEY ('Course ID') REFERENCES Courses(id)
);
CREATE TABLE [Course Participation](
'Person ID' integer,
'Course ID' integer,
'Date Taken' text,
FOREIGN KEY ('Person ID') REFERENCES People(id),
FOREIGN KEY ('Course ID') REFERENCES Courses(id)
);
나는 코스 등록되어있는 사람을 선택하는 것을 시도하고있다,하지만 어느 과정을 (촬영 적이 없다 그러므로 Course Participation 테이블에 기록이 없거나) 수년 전에 'Course Refresh Rate'보다 더 많이 수강 한 것입니다. select 문을 작성했지만 의도 한대로 작동하지 않습니다.
SELECT [First Name],
[Last Name]
FROM people AS p
LEFT JOIN courses AS c
JOIN [course enrolment] AS ce
JOIN [course participation] AS cp
ON p.id = ce.[Person ID]
AND p.id = cp.[Person ID]
AND c.id = ce.[Course ID]
AND c.id = cp.[Course ID]
WHERE EXISTS(SELECT * FROM [Course Enrolment] as ce_2 WHERE ce_2.[Person ID] = p.id and ce_2.[Course ID] = c.id)
AND ([date taken] < date('now', '-' || [course refresh rate] || ' year')
or NOT EXISTS(SELECT * FROM [Course Participation] WHERE cp.[Person ID] = p.id and cp.[Course ID] = c.id))
;
내가 잘못 했습니까?
테스트 완료 = 0 있다는 것입니다하지? – Himanshu
Exists 문에 대한 오해로 올바른 구문이라고 생각하는 것으로 바꾸 었습니다. – Sam
나는 당신의'JOIN ... ON ... '구조로 ** 테이블 **을 구성하고 ** 오직 ** 테이블에 ** 항목이있는 사람들을 포함 할 수 있다고 생각한다. ON 문을 전체적으로 제외하고 나중에 고유 한 결과를 선택하십시오. –