Exclure plusieurs valeurs en utilisant <>

J'essaye de créer une requête qui renvoie des résultats excluant 4 valeurs spécifiques d'une colonne.

Voici mon code:

SELECT CustomerID, ContactName, Country FROM Customers WHERE CustomerID IN (SELECT CustomerID FROM Customers WHERE (Country <> ('UK')('Australia')('Canada'))); 

Cela fonctionne si j'exclue un seul pays mais pas plusieurs.

Merci d'avance pour toute aide que vous pouvez fournir.

Utiliser l'opérateur NOT IN

La list doit être séparée par une virgule sans avoir besoin d'avoir des parenthèses ouvertes / fermées pour chaque valeur dans la list. Aussi, vous n'avez pas besoin de sub-query ajoutez simplement la clause Where du filter

 SELECT CustomerID, ContactName, Country FROM Customers WHERE Country NOT IN ( 'USA', 'UK', 'Australia', 'Canada' ) 

Assurez-vous que vous ne transmettez pas de valeurs NULL dans la list car NOT IN échoue lorsqu'une valeur NULL est présente dans la list

 Select CustomerID, ContactName, Country From Customers Where CustomerID NOT IN ('USA','UK','Australia','Canada'); 

Vous pouvez envisager de définir les pays exclus dans une table spéciale (par exemple, ExcludedCountry). Cela séparera vos données (pays exclus) de votre logique (select le client non dans les pays exclus). Dans ce cas, votre requête peut ressembler à:

 select CustomerID, ContactName, Country from Customers C left join ExcludedCountry EC ON EC.Name = C.CustomerID where CustomerID IS NOT NULL 

ou

 -- may be faster than above select CustomerID, ContactName, Country from Customers C where not exists ( select 1 from ExcludedCountry EC where EC.Name = C.CustomerID) 

L'avantage de cette solution est une gestion plus simple des éléments exclus.