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

pin*_*508 3 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'  
Run Code Online (Sandbox Code Playgroud)

(换句话说,只有当没有具有该名称的人员处于活动状态时,才会返回非活动的返回名称)

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

gbn*_*gbn 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)
Run Code Online (Sandbox Code Playgroud)