2011-06-13 49 views
3

我有以下數據的表:SQL-檢索不同ID

ID NAME ATTRIBUTE CODE 
============================= 
1  XX   MM  GC 
1  XX   ST  GC 
2  ZZ   LL  GC 
2  ZZ   ST  GC 
3  AA   MM  PC 

我需要ID,名稱從含有任一MM屬性或GC代碼而不是兩者的表。像查詢應檢索ID數字只有2和3,但不是1。

我該怎麼做?從TBL

SELECT ID, NAME 
    FROM <YOUR-TABLE-NAME> 
WHERE 
(ATTRIBUTE = 'MM' AND CODE <> 'GC') OR 
(ATTRIBUTE <> 'MM' AND CODE = 'GC') ; 

回答

0

試試這個:

select distinct ID 
from TableName 
where (Attribute = 'MM' or Code = 'GC') 
    and not (Attribute = 'MM' AND Code = 'GC') 
+2

由於第二行數據,這不會返回1嗎? – AakashM 2011-06-13 16:31:32

+0

@AakashM:是的,我認爲你是對的。我沒有注意到這一點。我認爲@巴里的答案更好。 – MJB 2011-06-13 16:32:44

0

試試這個? 其中 (屬性= 'MM' 或碼= 'GC') 而不是(屬性= 'MM' 和代碼= 'GC')

2
Select Id, Name 

From #t 
Where (Attribute = 'MM' Or Code = 'GC') 
And Id Not In (Select Id From #t 
       Where (Attribute = 'MM' And Code = 'GC')) 
1
select distinct T1.ID, 
       T1.NAME 
from T as T1 
where (T1.ATTRIBUTE = 'MM' or T1.CODE = 'GC') and 
     not exists (select * 
        from T as T2 
        where T1.ID = T2.ID and 
         T2.Attribute = 'MM' and 
         T2.CODE = 'GC') 

結果:

ID NAME 
2 ZZ 
3 AA 
0
(
    SELECT ID, NAME FROM TableName WHERE CODE = 'GC' 
    EXCEPT 
    SELECT ID, NAME FROM TableName WHERE ATTRIBUTE = 'MM' 
) 
UNION 
(
    SELECT ID, NAME FROM TableName WHERE ATTRIBUTE = 'MM' 
    EXCEPT 
    SELECT ID, NAME FROM TableName WHERE CODE = 'GC' 
)