【问题标题】:Select row matching a condition if no other rows match a different condition如果没有其他行匹配不同的条件,则选择匹配条件的行
【发布时间】:2011-04-20 01:30:09
【问题描述】:

非常基本,但不知道这种类型的查询叫什么...我想要一个基本上可以做到这一点的查询(伪SQL):

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

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

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

【问题讨论】:

    标签: sql conditional-statements


    【解决方案1】:

    您正在寻找 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-25
      • 1970-01-01
      • 1970-01-01
      • 2018-02-24
      相关资源
      最近更新 更多