2011-12-12 42 views
1

我在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; 

回答

1

爲什麼這是不是很簡單?

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; 
+0

謝謝 - 這是有效的。我沒有意識到你可以做到這一點,並沒有嵌套在那裏的完整子查詢。這些都是必填字段,因此不存在NULL值。但在相關說明中,如果存在NULL值,這是行不通的嗎? – maneesha

+0

否,'Null = 5'導致'Null','Null <> 5'導致'Null','NOT(Null)'導致'Null'。導致null的條件從結果中排除該行。 –

1

我想一般來說這種形式:

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 

我覺得JOIN比NOT IN更快。

編輯:更改爲顯示選擇而不是表上的聯接。

編輯:我不明白爲什麼這個答案是投票。

+0

謝謝 - 我想知道如果我應該做一些類型的JOIN而不是NOT IN。至於你的例子,我正在尋找排除原始查詢的結果,而不是查找NULL結果。 – maneesha

+0

是的。我的代碼中的NULL意味着在B中沒有找到與A中的連接值相對應的內容。因此它會顯示不在b中的選定字段的值。在你的情況下,你會找到複合鍵sitename和year的參與者值。而且你會加入你的選擇而不是加入表格。 – mikeY

+0

這是一個很好的解決方案,根據您的樣本排除來自不同的表格。在問題中,如果它是同一張表,則簡單更改標準就更好了。 –