我正在写一个联系人&事件数据库,并希望查看尚未被邀请到特定事件的那些联系人。我有以下表格和查询:
联系人 - 表
活动 - 表
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和子查询,但我似乎无法找到解决方案。
非常感谢你的时间。
答案 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