1

我在 Access 中有这段代码:

SELECT DISTINCT p.course, p.date
FROM Student s, Participation p
WHERE s.id = d.student AND footballer = NO

当我运行它时,我得到 10 行。所以我下次用它作为子查询:

SELECT c.course, c.date
FROM Course c
WHERE NOT EXISTS
(SELECT DISTINCT p.course, p.date
FROM Student s, Participation p
WHERE s.id = d.student AND footballer = NO)

我根本没有得到任何结果。所以我删除了NOTin NOT EXISTS,我得到了Course表中的所有 15 行。所以在我看来,course从主查询而不是从子查询中date读取的子查询。但这怎么可能,因为我创建了不同的别名,甚至源表也不同(尽管它们都包含名称和的列),我该如何解决这个问题?CourseParticipationcoursedate

4

1 回答 1

3

您的子查询与主查询无关。试试这样的东西?

SELECT c.course, c.date
  FROM Course c
 WHERE NOT EXISTS (
                   SELECT DISTINCT p.course, p.date
                     FROM Student s INNER JOIN Participation p ON s.id = d.student
                    WHERE footballer = NO
                      AND p.course = c.course
                      AND p.date   = c.date
                  )

现在,这将接收每条记录Course并为每一行运行 NOT EXISTS 检查,通过and字段过滤Participation表。coursedate

您的示例只运行了一次子查询。它返回了 10 条记录,所以NOT EXISTS总是失败。

于 2012-04-26T12:35:11.747 回答