怎么办 WHERE ((SELECT COUNT(*) ...) = 0 OR EXISTS (SELECT * FROM ...))?
Posted
技术标签:
【中文标题】怎么办 WHERE ((SELECT COUNT(*) ...) = 0 OR EXISTS (SELECT * FROM ...))?【英文标题】:How to do 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 整理好了! 【参考方案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')
【讨论】:
以上是关于怎么办 WHERE ((SELECT COUNT(*) ...) = 0 OR EXISTS (SELECT * FROM ...))?的主要内容,如果未能解决你的问题,请参考以下文章
Berkeley DB 相当于 SELECT COUNT(*) All, SELECT COUNT(*) WHERE LIKE "%...%"
数据库中,select where group by having 执行顺序
sql动态拼接:为啥select count(*) where条件后面<if test="">不起作用?
Wrong number of parameters: expected 0, was given 1 Query: select count(*) from product where pname