Построение запроса путем исключения результатов другого запроса - PullRequest
1 голос
/ 13 декабря 2011

Я создаю базу данных в Access 2010.

У меня есть этот запрос, который работает так, как я хочу:

    SELECT Participants.ParticipantID, [FirstName]+' '+[LastName] AS Participant
    FROM Participants
    WHERE (((Participants.SiteName)=forms!DailyWorkshops!SiteName) And 
((Participants.YearLookup)=forms!DailyWorkshops!YearLookup))
    ORDER BY Participants.FirstName, Participants.LastName;

Теперь я хочу еще один запрос, который дает мне все остальное.

то есть

    SELECT Participants.ParticipantID, [FirstName]+' '+[LastName] AS Participant
    FROM Participants

    WHERE 

    **exclude all these results 
    (((Participants.SiteName)=forms!DailyWorkshops!SiteName) And
 ((Participants.YearLookup)=forms!DailyWorkshops!YearLookup))**


    ORDER BY Participants.FirstName, Participants.LastName;

Кажется, это работает, но мне было интересно, это самый простой способ сделать это?

    SELECT Participants.ParticipantID, [FirstName]+' '+[LastName] AS Participant
    FROM Participants
    WHERE Participants.ParticipantID NOT IN 

    (SELECT Participants.ParticipantID FROM Participants WHERE 
     (((Participants.SiteName)=forms!DailyWorkshops!SiteName) And 
((Participants.YearLookup)=forms!DailyWorkshops!YearLookup)))
    ORDER BY Participants.FirstName, Participants.LastName;

Ответы [ 2 ]

1 голос
/ 13 декабря 2011

В общем, я думаю, что эта форма:

SELECT field
from list_a
where field not in (select field from list_b)  

будет выглядеть так:

SELECT a.field
from list_a a left join (select field from list_b) b on a.field=b.field
where b.field is NULL 

Я думаю, что СОЕДИНЕНИЕ быстрее, чем NOT IN.

РЕДАКТИРОВАТЬ: Изменено, чтобы показать объединение на выбор вместо таблицы.

Редактировать: я не понимаю, почему этот ответ был отклонен.

1 голос
/ 13 декабря 2011

Почему это не очень просто ...

SELECT Participants.ParticipantID, [FirstName]+' '+[LastName] AS Participant
FROM Participants
WHERE 
    NOT 
       (((Participants.SiteName)=forms!DailyWorkshops!SiteName) And
        ((Participants.YearLookup)=forms!DailyWorkshops!YearLookup))
ORDER BY Participants.FirstName, Participants.LastName;

Единственная причина может быть из-за пустых значений в ваших столбцах, которые вы можете исправить с помощью:

SELECT Participants.ParticipantID, [FirstName]+' '+[LastName] AS Participant
FROM Participants
WHERE 
    NOT 
       (((Participants.SiteName)=forms!DailyWorkshops!SiteName OR
             IsNull(Participants.SiteName)) And
        ((Participants.YearLookup)=forms!DailyWorkshops!YearLookup OR
             IsNull(Participants.YearLookup)))
ORDER BY Participants.FirstName, Participants.LastName;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...