2010-10-01 58 views
3

非常基本,但不知道調用了哪種類型的查詢...我想要一個基本上會這樣做的查詢(僞SQL):如果沒有其他行匹配條件,則選擇與條件匹配的行

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

(換句話說,返回無效的名稱,只有當沒有一個與該名稱被激活)

這將被用來讓用戶一個選項,以重新激活不活動的項目,但我想查詢db以確保該項目尚未激活。

回答

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) 
「對於未激活的每個名稱,現用的相同名稱的不存在的行」