2012-07-03 114 views
0

我有一個名爲'Domains'的表。列A(域名)包含各種域名的列表。列B(狀態)包含它的'狀態'。狀態可以是活動,結束,阻止,取消。一個域名可以在列A中多次列出,並且不限於只有一種類型的狀態。請注意,如果一個域在列A中多次列出,並且它的每個實例的狀態爲已取消,則該域中的所有事件都應顯示在結果中。過濾出包含一個特定條件的唯一列表

我想列出所有隻有狀態被取消的域。他們不能取消狀態,也是另一種狀態。在下面的這個例子中,它應該只返回domain5.com。

DOMAINNAMES

Domain1.com
Domain2.com
Domain1.com
Domain4.com
Domain5.com

狀態

活動
截至
已取消
阻止
取消

非常感謝!

+0

如果domain5.com在表中可用兩次且狀態爲'取消',則輸出是什麼 –

+0

不解決該問題的道歉。只要該域沒有任何其他類型的狀態而非已取消,它應該列出該域名的所有出現。它不應限於返回完全不同的域名列表。 – user1497776

+0

從我在上面的評論和你在上面的評論中解釋了什麼,我的理解是結果集應該包含'domain5'兩次,因爲沒有其他類型的狀態已經更新,並且現有的行都有狀態爲「取消」。我對嗎? –

回答

0
SELECT DISTINCT domainname FROM DomainsTable 
WHERE 
Status = 'Canceled' 
+0

笏我從你的問題understanded – Mido

+0

道歉,不解決這個問題。只要該域沒有任何其他類型的狀態而非已取消,它應該列出該域名的所有出現。它不應限於返回完全不同的域名列表。 – user1497776

0

你可以使用一個not exists條款,要求沒有行,在其他狀態相同的域:

select * 
from Domains d1 
where status = 'cancelled' 
     and not exists 
     (
     select * 
     from Domains d2 
     where d1.domainname = d2.domainname 
       and d2.status <> 'cancelled' 
     ) 
0

試試用下面的SQL查詢:

select Domainnames from Domains 
      where Status ='cancelled' AND 
      Domainnames NOT IN (SELECT Domainnames from Domains where Status <> 'cancelled') 
+0

這個邏輯似乎工作。我還必須整合其他表格,所以這是最簡單的。謝謝! – user1497776

+0

如果答案幫助你,你可以接受答案... –

0

嘗試這個:

select * from domains d 
where d.status = 'cancelled' and 
(select count(*) from domains where domainnames = d.domainesnames) = 1 ; 

如果count equals to 1表示d.domainnames只有一行,即選擇查詢中的當前行。

相關問題