SQL查询 - 查找值不存在的记录

时间:2014-03-14 19:16:47

标签: sql sql-server

以下面的数据为例

表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        

3 个答案:

答案 0 :(得分:2)

select distinct [User] from tableA where TokenStatus <> 'Valid'
except
select distinct [User] from tableA where TokenStatus = 'Valid' 

SQL小提琴:http://www.sqlfiddle.com/#!3/85341/1

答案 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