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)

そして、私はまったく結果を得ません。NOTそのため、 inを削除するNOT EXISTSと、テーブルにある 15 行すべてが取得されCourseます。したがって、サブクエリからではなく、メインクエリから読み取られたサブクエリから読み取られたように思えcourseます。しかし、異なるエイリアス名を作成し、ソース テーブルでさえも異なるため (どちらにも名前との列が含まれていますが)、どうすればこれが可能になり、どうすれば問題を解決できますか?dateCourseParticipationcoursedate

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 チェックが実行され、およびフィールドでParticipationテーブルがフィルタリングされます。coursedate

あなたの例では、サブクエリを 1 回だけ実行しました。10 件のレコードが返されたため、NOT EXISTS常に失敗していました。

于 2012-04-26T12:35:11.747 に答える