Exclure des lignes avec une colonne contenant une valeur si plusieurs lignes existent pour

La table a

User Value john 284 john 200 john 5 sally 245 sally 180 sally 10 bill 90 bill 1000 bill 284 greg 10 greg 90 greg 2000 

Si l'user a une valeur de 284 par exemple, je veux que le résultat ne l'inclue pas. Je ne suis pas sûr de vérifier toutes les lignes de l'user pour voir s'il y a la valeur 284 et ne pas montrer cet user dans le résultat si y a-t-il. Le résultat devrait être distinct.

Le résultat final devrait être

 User greg sally 

L'utilisation not exists :

 select distinct user from users u where not exists ( select 1 from users u2 where u2.user = u.user and u2.value = 284 ) 

Qu'est-ce que cela fait, c'est qu'il attrape tous les users de la table des users où ils n'ont pas une ligne avec la valeur 284 dans la table des users . Vous pouvez également faire exists tant qu'inverse (find seulement les users avec une valeur 284 ).

En outre, utilisez un distinct sur la select pour limiter les users renvoyés à leurs valeurs uniques.

  Select distinct User from table where User not in ( Select User from table where value =284) 

Une autre option est une auto-jointure:

 SELECT DISTINCT u1.[User] FROM users u1 LEFT OUTER JOIN users u2 ON u2.[User] = u1.[User] AND u2.Value = 284 WHERE u2.[User] IS NULL