SET DELETED ON
CLOSE ALL
&&& Create cursor with names
CREATE CURSOR curNames (cPKey C(4), cName C(10))
INSERT INTO curNames VALUES ( "1000","Joe")
INSERT INTO curNames VALUES ( "1001","Sam")
INSERT INTO curNames VALUES ( "1002","Jill")
INSERT INTO curNames VALUES ( "1003","Mary")
INSERT INTO curNames VALUES ( "1004","Zoe")
&&& Create cursor with Subjects
CREATE CURSOR curSubjects (cPKey C(4), cSubject C(10))
INSERT INTO curSubjects VALUES ( "1000","English")
INSERT INTO curSubjects VALUES ( "1001","Math")
INSERT INTO curSubjects VALUES ( "1002","French")
INSERT INTO curSubjects VALUES ( "1003","History")
INSERT INTO curSubjects VALUES ( "1004","Chem")
&&& Create cursor with subjects taken
CREATE CURSOR curCross (cFKNames C(4), cFKSubjects C(4))
INSERT INTO curCross VALUES ( "1000","1000") && Joe takes English
INSERT INTO curCross VALUES ( "1000","1001") && Joe takes Math
INSERT INTO curCross VALUES ( "1000","1003") && Joe takes History
INSERT INTO curCross VALUES ( "1001","1000") && Sam takes English
INSERT INTO curCross VALUES ( "1001","1003") && Sam takes History
INSERT INTO curCross VALUES ( "1001","1004") && Sam takes Chem
INSERT INTO curCross VALUES ( "1002","1000") && Jill takes English
INSERT INTO curCross VALUES ( "1002","1002") && Jill takes French
INSERT INTO curCross VALUES ( "1002","1003") && Jill takes History
INSERT INTO curCross VALUES ( "1003","1003") && Mary takes History
INSERT INTO curCross VALUES ( "1004","1001") && Zoe takes Math
INSERT INTO curCross VALUES ( "1004","1004") && Zoe takes Chem
&&& Create cursor with all possible combinations
SELECT curNames.cPKey as cFKNames, curSubjects.cPKey as cFKSubjects FROM curNames, curSubjects ;
INTO CURSOR curNamesBysubjects READWRITE
&&& Create cursor with the subjects NOT taken
DELETE curNamesBySubjects from curNamesBySubjects ;
join curCross on curNamesBySubjects.cFKNames = curCross.cFKNames AND curNamesBySubjects.cFKSubjects = curCross.cFKSubjects
&&& Show Names with subjects
SELECT curNames.cName, curSubjects.cSubject FROM curNames ;
JOIN curCross ON curNames.cPKey = curCross.cFKNames ;
JOIN curSubjects ON curSubjects.cPKey = curCross.cFKSubjects ;
ORDER BY 1 ;
INTO CURSOR curByName
LOCATE
BROWSE NOWAIT
*!* &&& Show Subjects with Names
*!* SELECT curNames.cName, curSubjects.cSubject FROM curNames ;
*!* JOIN curCross ON curNames.cPKey = curCross.cFKNames ;
*!* JOIN curSubjects ON curSubjects.cPKey = curCross.cFKSubjects ;
*!* ORDER BY 2, 1 ;
*!* INTO CURSOR curBySubject
*!* LOCATE
*!* BROWSE NOWAIT
&&& Show Subjects NOT taken
SELECT curNames.cName, curSubjects.cSubject FROM curNames ;
JOIN curNamesBySubjects ON curNames.cPKey = curNamesBySubjects.cFKNames ;
JOIN curSubjects ON curSubjects.cPKey = curNamesBySubjects.cFKSubjects ;
ORDER BY 1 ;
INTO CURSOR curSubjectsNotTaken
LOCATE
BROWSE
SET DELETED OFF
CLOSE ALL