1

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

联系人 - 表
事件 - 表
ContactInvitation - 表(创建 EventID 和 ContactID 的 PK 以显示谁被邀请参加哪个事件)

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

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

Mark - Null
Sean - Null
Steven - 事件 1
Steven - 事件 2
Mike - 事件 1
Jill - 事件 1
Rob - 事件 2

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

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

但是,我很难接受 Steven 被邀请参加活动 1 和 2 的事实,所以如果我过滤“Event<>1 OR Event=Null”,即使他已被邀请参加活动 1,Steven 仍然会出现在列表中。

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

非常感谢您抽出宝贵时间。

4

2 回答 2

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' 
      );
于 2012-05-27T08:30:58.987 回答
0

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

SELECT * FROM ContactInvitation WHERE EventID NOT IN ('Event 1') GROUP BY ContactID
于 2012-05-27T08:11:38.900 回答