SELECT [T1].课程号, IIf(ISNULL([T2].先行课程号),"--",[T2].先行课程号) AS 先行课程号
FROM TableB AS T1 LEFT JOIN TableB AS T2 ON [T1].先行课程号=[T2].课程号;

解决方案 »

  1.   

    select 课程表.pc# from 课程表,{select pc# from 课程表 where c#=?} as Course where 课程表.c#=course.pc#
      

  2.   

    (已验证!)
    Students(StudentID, Name)
             1          1
             2          2
             3          3
             4          4
             5          5
    Subjects(SubjectID, Name)
             C1         C1
             C2         C2
             C3         C3
             C4         C4
             C5         C5
    Grades(StudentID, SubjectID, Grade)
             1          C1         A
             1          C2         A
             1          C3         A
             1          C5         B
             2          C1         B
             2          C2         C
             2          C4         C
             3          C2         B
             3          C3         C
             3          C4         B
             4          C3         B
             4          C4         D
             5          C1         D
             5          C2         D
             5          C3         D
             5          C4         D
             5          C5         DAnswer to questoin one  SELECT Students.*
      FROM Students
      WHERE NOT EXITS(
        SELECT *
        FROM Grades
        WHERE EXITS(
          SELECT *
          FROM Subjects
          WHERE  Grades.StudentID   = Students.StudentID AND
                 Subjects.SubjectID = Grades.SubjectID AND
                 Subjects.SubjectID = 'C3'))Answer to questoin twoSELECT Students.*
    FROM Students
    WHERE NOT EXISTS(
      SELECT *
      FROM Subjects
      WHERE NOT EXISTS(
        SELECT *
        FROM Grades
        WHERE Subjects.SubjectID = Grades.SubjectID AND
               Students.StudentID = Grades.StudentID))
      

  3.   

    因为嵌套的先行课层数不确定,难以用一个SQL给出。
    最简单的方法是循环:
    dim strC# as string
    do 
    set rs = cn.execute("select cn, [pc#] from kb where [c#]='" & _
        strC#  & "'")
    if not isnull(rs!pc#) then strC# = rs!pc#
    loop until isnull(rs!pc#)