2012-05-27 56 views
1

我在撰寫聯繫人&活動數據庫,並且希望查看那些尚未邀請參加特定活動的聯繫人。我有以下表和查詢:訪問查詢以顯示未邀請參加活動的嘉賓

與我們聯繫 - 表
活動 - 表
ContactInvitation - 表(創建事件ID &的PK的ContactID顯示誰已被邀請到事件)

客人&活動 - 查詢(顯示聯繫人的所有實例以及他們被邀請的事件)

在訪客&事件如果沒有邀請某個聯繫人蔘加事件,則該事件字段爲空。如果他們被邀請參加多個活動,則會有重複的聯繫人姓名顯示他們受邀參加的活動。例如

馬克 - 空
肖恩 - 空
史蒂芬 - 事件1
史蒂芬 - 事件2
邁克 - 事件1
吉爾 - 事件1
羅布 - 事件2

我現在想過濾這些聯繫人以僅顯示(每個聯繫人的1個實例)未收到特定事件邀請的人員。例如。顯示尚未被邀請參加事件1的所有聯繫人。

對NotInvited事件1的查詢應顯示Mark,Sean & Rob。

不過,我有一個事實難度是史蒂芬被邀請到事件1 & 2,所以如果我的「事件<> 1或事件過濾= NULL)史蒂芬仍然會出現在列表中,即使他已經邀請到事件1.

請幫助!這一直使我瘋狂。我花了過去幾天谷歌搜索,雖然我現在瞭解有關GROUPBY和子查詢,我似乎無法找到解決方案

非常感謝您的時間

+0

你尋找你的架構的改變,還是你只是在尋找一個查詢,將返回每個查詢只有一個接觸? – Jeshurun

+0

都沒有 - 我想要一個查詢來顯示所有沒有被邀請參加特定活動的人。我可以編寫查詢來向那些沒有被邀請參加任何活動的人展示,但不會顯示那些沒有被邀請參加過活動1的人。我已經稍微改變了一些說明,希望能夠讓它更加清晰。感謝您的幫助。 – user1419888

回答

1

我首先從具有空值ContactInvitation刪除所有行。它們是無用的,可能會造成麻煩。如果一個人沒有被邀請參加一個活動,那麼你在表格中根本就沒有該行的邀請(邀請)。無需將行放入空值。

DELETE FROM ContactInvitation 
WHERE EventID IS NULL ; 

然後,你可以使用此查詢:

SELECT c.* 
FROM Contacts AS c 
WHERE NOT EXISTS 
     (SELECT * 
     FROM ContactInvitation AS i 
     WHERE i.ContactID = c.ContactID 
      AND i.EventID = 'Event 1' 
    ); 
+0

絕對傳說!非常感謝。像魅力一樣工作。簡直不敢相信我自己沒有想到。 – user1419888

0

我不熟悉ac塞斯但通常,最簡單的方法是:

SELECT * FROM ContactInvitation WHERE EventID NOT IN ('Event 1') GROUP BY ContactID 
+0

這不會起作用,因爲它還會顯示Steven,因爲他也是針對事件2註冊的,並且沒有考慮到已被邀請參加任何活動的聯繫人。 – user1419888

+0

然後有NULL行的目的是什麼?問題在那裏,不在我的查詢中。但是...'SELECT * FROM ContactInvitation WHERE EventID不在('Event 1')和EventID不爲NULL GROUP BY ContactID' –