我在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)
我根本没有结果。因此,我删除了NOT
中的NOT EXISTS
,我获得了Course
表中的所有15行。因此,在我看来,子查询中的course
和date
从主查询中读取Course
而不是从子查询中读取Participation
。但是这怎么可能,因为我创建了不同的别名,甚至源表也不同(尽管它们都包含名称为course
和date
的列),我该如何解决这个问题?
答案 0 :(得分: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检查,并按Participation
和course
字段过滤date
表。
您的示例只运行了一次子查询。它返回了10条记录,因此NOT EXISTS
总是失败。