1

連絡先とイベントのデータベースを作成していて、特定のイベントに招待されていない連絡先を表示したいと考えています。次のテーブルとクエリがあります。

Contacts - テーブル
Events - テーブル
ContactInvitation - テーブル (誰がどのイベントに招待されたかを示すために、EventID と ContactID の PK を作成します)

ゲストとイベント - クエリ (連絡先のすべてのインスタンスと、招待されたイベントも表示します)

ゲストとイベントでは、連絡先がイベントに招待されていない場合、イベント フィールドは空白になります。複数のイベントに招待されている場合は、招待されているイベントを示す連絡先の名前が重複しています。例えば

マーク - ヌル
ショーン - ヌル
スティーブン - イベント 1
スティーブン - イベント 2
マイク - イベント 1
ジル - イベント 1
ロブ - イベント 2

これらの連絡先をフィルタリングして、特定のイベントに招待されていない連絡先 (各連絡先の 1 つのインスタンス) のみを表示したいと考えています。たとえば、イベント 1 に招待されていないすべての連絡先を表示します。

イベント 1 への NotInvited のクエリには、Mark、Sean、Rob が表示されます。

ただし、スティーブンがイベント 1 と 2 に招待されているという事実に問題があるため、「イベント <>1 OR イベント = Null) スティーブンはイベント 1 に招待されていてもリストに表示されます。

助けてください!これは私を夢中にさせています。私は過去数日間グーグルで過ごしました.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 に答える