2016-07-02 3 views
2

に完全なクエリによって保存されたクエリを交換します特定のコースをやっていないメンバー。MS Accessのは、どのように私は3つのテーブルを持っているサブクエリ

手動で試行した後、私はMS Accessに「クエリウィザード」を試しました。

AがQuery1をとしてクエリを保存した:私は終わった保存Query1をを使用して

SELECT tblMembers_Info.*, tblCourses.CourseName 
FROM tblMembers_Info 
INNER JOIN 
(tblCourses INNER JOIN tblMembers_Courses 
    ON tblCourses.IDCourses = tblMembers_Courses.IDCourses) 
ON tblMembers_Info.Members_ID = tblMembers_Courses.Members_ID 
WHERE (tblCourses.CourseName) In ('NameOftheCourse'); 

第二のクエリのコースをした1つのクエリが //こと:

SELECT tblMembers_Info.Members_ID, tblMembers_Info.FirstName, tblMembers_Info.LastName 
FROM tblMembers_Info 
    LEFT JOIN [Query1] 
     ON tblMembers_Info.[Members_ID] = Query1.[Members_ID] 
WHERE (((Query1.Members_ID) Is Null)); 

はどのようにして交換することができますQueryDef(保存されたクエリ "Query1")を使用する代わりに、完全なクエリを使用して2番目のクエリのQuery1?

また、このクエリを確実に書き込むためのより良い方法があります。本当に助けていただければ幸いです。

答えて

2

あなたは、単に...が終了;せずに、最初のクエリのSQLである必要がありLEFT JOIN (...) AS [Query1]LEFT JOIN [Query1]を置き換えることができます。

は、しかし、私はNOT INの使用は、同じ結果を得るために、より良い性能を与えるかもしれない、あなたの特定のケースで考える:

SELECT  tblMembers_Info.Members_ID, tblMembers_Info.FirstName, tblMembers_Info.LastName 
FROM  tblMembers_Info 
WHERE  tblMembers_Info.[Members_ID] NOT IN (
    SELECT  tblMembers_Info.[Members_ID] 
    FROM  ((tblMembers_Info 
    INNER JOIN tblMembers_Courses 
      ON tblMembers_Info.Members_ID = tblMembers_Courses.Members_ID) 
    INNER JOIN tblCourses 
      ON tblCourses.IDCourses = tblMembers_Courses.IDCourses) 
    WHERE  tblCourses.CourseName = 'NameOftheCourse' 
); 
+0

おかげで、それが動作します。私は前に "NOT IN"を試しましたが、私が望んだものだけでなく、すべてのメンバーを獲得してから、試してみると何か間違ったことが起きたかもしれません。私はここで試した質問はありませんが、あなたが私に与えたものと何が違うのかをもう一度確認するのを待つことはできません。 もう一度ありがとうございます。 – Luke

+0

ようこそ。複数の列を選択した副問合せで「NOT IN」を試した可能性があります。 – trincot

関連する問題