访问查询以显示未邀请参加活动的访客

时间:2012-05-27 08:04:33

标签: sql events contacts

我正在写一个联系人&事件数据库,并希望查看尚未被邀请到特定事件的那些联系人。我有以下表格和查询:

联系人 - 表
活动 - 表
ContactInvitation - 表格(创建EventID& ContactID的PK以显示谁被邀请参加哪个活动)

访客及活动 - 查询(显示联系人的所有实例以及他们被邀请的活动)

在来宾和活动中,如果未邀请联系人参加活动,则活动字段为空白。如果他们被邀请参加多个活动,则会有重复的联系人姓名显示他们被邀请参加的活动。 e.g。

Mark - Null
肖恩 - Null
史蒂文 - 事件1 史蒂文 - 事件2
迈克 - 赛事1 吉尔 - 赛事1 Rob - 事件2

我现在想要过滤这些联系人以仅显示未被邀请到特定事件的(每个联系人的1个实例)。例如。显示尚未被邀请参加活动1的所有联系人。

NotInvited to event 1的查询应该显示Mark,Sean&抢。

但是,史蒂文被邀请参加第一场比赛,我很难。 2如果我过滤“Event<> 1 OR Event = Null”,即使他被邀请参加活动1,Steven仍会出现在列表中。

请帮忙!这让我发疯了。我花了最近几天的谷歌搜索,虽然我现在已经了解了GROUPBY和子查询,但我似乎无法找到解决方案。

非常感谢你的时间。

2 个答案:

答案 0 :(得分:1)

我先删除ContactInvitation中有NULL的所有行。它们没用,可能会造成麻烦。如果没有邀请某人参加某个活动,那么您在表格中就没有该行(邀请)。无需将行放入Null。

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' 
      );

答案 1 :(得分:0)

我不熟悉访问权限,但一般来说,最简单的方法是:

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