【问题标题】:How to do WHERE ((SELECT COUNT(*) ...) = 0 OR EXISTS (SELECT * FROM ...))?怎么办 WHERE ((SELECT COUNT(*) ...) = 0 OR EXISTS (SELECT * FROM ...))?
【发布时间】:2012-10-11 23:08:01
【问题描述】:

例如,我有一个表 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'))

我该怎么做?

【问题讨论】:

  • 什么是数据库服务器?查询语法很重要
  • @sehe 谢谢 - SQL 2008,虽然我确信我能够转换语法,但只是在逻辑上有点挣扎。 RichardTheKiwi 整理好了!

标签: sql join exists


【解决方案1】:
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')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    相关资源
    最近更新 更多