2011-07-21 55 views
1

如果列'WRONG'從不讀取「YES」,我想從表中選擇一行(多次出現)。這意味着如果行存在100時間和只有一次錯誤=是,然後不顯示結果中的任何行。如果一行等於某個值,則省略所有結果

*如果可能的話沒有變量和while循環。如果無法完成,請繼續並使用變量發佈解決方案。

這裏是表結構的一個例子:

表1

USER--WRONG--otherColumns 
bob    data 
bob    data 
bob    data 
bob    data  
bob    data 
bob YES  data 
bob    data 
bob    data 
jon    data 

結果應該是: 喬恩(因爲一次錯誤等於是爲用戶bob)

這編碼的課程並沒有忽略所有的鮑勃。只有一個被省略:

SELECT USER FROM table1 WHERE wrong <> 'yes' 

回答

1
SELECT * 
FROM table1 t1 
WHERE NOT EXISTS 
    (SELECT 1 
    FROM table1 t2 
    WHERE t1.user = t2.user 
    AND wrong = 'yes'); 
0
select user from table1 where wrong <> 'yes' group by user 
+0

仍然獲得鮑勃和Jon – gbn

+0

難道不我仍然得到7個鮑勃?如果Yes出現一次,所有的鮑勃必須離開! – tdjfdjdj

1
SELECT 
    USER 
FROM 
    Mytable T1 
WHERE 
    NOT EXISTS (SELECT 3 
     FROM Mytable T2 
     WHERE T1.user = T2.User AND T2.Wrong = 'YES') 

您可以使用EXCEPT太(標籤說TSQL),這給同樣的計劃

SELECT 
    USER 
FROM 
    Mytable 
EXCEPT 
SELECT 
    USER 
FROM 
    Mytable 
WHERE 
    Wrong = 'YES' 

而對於EXISTS仇敵。這假設用戶列沒有空值,否則失敗

SELECT 
    USER 
FROM 
    Mytable T1 
WHERE 
    T1.USER NOT IN (SELECT T2.USER 
     FROM Mytable T2 
     WHERE T2.Wrong = 'YES') 
2
select user 
from table1 a 
where not exists (select 1 from table1 b where a.user = b.user and wrong = 'yes') 
相關問題