以下面的数据为例
表a
User TokenStatus
----- -----------
a Valid
a Valid
b Deactivated
b Deactivated
c Valid
c Valid
c Suspended
d Deactivated
d Suspended
我想找到他们没有为其分配令牌的所有用户,状态为“有效”,即所有没有有效令牌的用户(或除有效之外的所有其他状态)
因此,对于上面的示例,我希望得到结果(因为用户a和c具有有效的令牌)
结果
User
-----
b
d
答案 0 :(得分:2)
select distinct [User] from tableA where TokenStatus <> 'Valid'
except
select distinct [User] from tableA where TokenStatus = 'Valid'
答案 1 :(得分:1)
这应该这样做:
select distinct t1.user_name
from the_table t1
where not exists (select 42
from the_table t2
where t2.user_name = t1.user_name
and t2.tokenStatus = 'Valid');
(请注意,我使用user_name
作为列,因为user
几乎是每个数据库中的保留字,如果用作列名,则需要特殊处理。
答案 2 :(得分:0)
试试这个:
SELECT DISTINCT t1.[User]
FROM YourTable t1
WHERE NOT EXISTS
(
SELECT 1 FROM YourTable t2 WHERE t2.TokenStatus = 'Valid' And t1.[User] = t2.[User]
)
SqlFiddle:http://www.sqlfiddle.com/#!3/6aa092/4