怎么办WHERE((SELECT COUNT(*)...)= 0 OR EXISTS(SELECT*FROM ...))?

Mar*_*cus 2 sql join exists

例如,我有一个表Person,每个条目都有一个ID,我有一个表PersonEvent,记录personID每个人在一个事件.

如果PersonEvent事件中不包含任何行,则Person表中的每个人都会参加.但是,如果表中有条目,则PersonEvent只有那些人参加了此活动.

我想做一个查询,例如:

SELECT * 
FROM Person p 
WHERE ((SELECT COUNT(*)
        FROM PersonEvent pe 
        WHERE pe.personID = p.ID 
        AND pe.eventID = '290') = 0 
      OR EXISTS 
        (SELECT * 
         FROM PersonEvent pe 
         WHERE pe.personID = p.ID 
         AND pe.eventID = '290'))
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

Ric*_*iwi 9

SELECT *
  FROM Person p
 WHERE NOT EXISTS ( -- not a single person for the event
       SELECT *
         FROM PersonEvent
        WHERE eventID = '290')
    OR EXISTS ( -- the person for the event
       SELECT *
         FROM PersonEvent pe
        WHERE pe.personID = p.ID AND pe.eventID = '290')
Run Code Online (Sandbox Code Playgroud)