如果没有其他行匹配不同的条件,请选择与条件匹配的行

时间:2010-10-01 20:33:32

标签: sql conditional-statements

非常基本,但不知道调用这种类型的查询...我想要一个基本上会这样做的查询(伪SQL):

SELECT name 
  FROM Table  
 WHERE activity_status != 'active'  
   AND there are no rows with that same name where activity_status = 'active'  

(换句话说,只有当没有具有该名称的人才有效时,非活动的返回名称才会生效)

这将用于允许用户重新激活非活动项目的选项,但我想查询数据库以确保该项目尚未激活。

1 个答案:

答案 0 :(得分:6)

您正在寻找NOT EXISTS模式。

“对于每个未激活的名称,不存在同名活动的行”

SELECT name FROM Table T1
WHERE activity_status != 'active'
AND
NOT EXISTS (SELECT *
        FROM Table T2
        WHERE
            T2.activity_status = 'active' AND T1.name = T2.name)