Utiliser la condition NOT Equal dans sql?

Nouveau WRInaute
Je souhaite récupérer les commandes qui ont une activité "Livré" (ActivityID = 1) mais pas une activité "Reçu" (ActivityID = 4) sur la table des commandes. c'est-à-dire les commandes reçues mais pas encore livrées.

ma requête est

Code:
SELECT OrderID FROM tblOrderActivity

where (tblOrderActivity.ActivityID = 1 AND tblOrderActivity.ActivityID != 4) 
GROUP BY OrderID

Il ne renvoie pas le résultat souhaité. le résultat devrait être orderID 2 et 4. Quelqu'un peut-il me guider avec une bonne ressource pour lire et apprendre le concept d'une bonne manière avec des exemples ? Je suis cet article sur pas égal en SQL.
 
WRInaute passionné
Il faut utiliser IN / NOT IN ou EXISTS / NOT EXISTS.

Par exemple :
Code:
SELECT OrderID FROM tblOrderActivity t1

WHERE EXISTS (SELECT 1 FROM tblOrderActivity t2 WHERE t2.OrderID = t1.OrderID AND t2.ActivityID = 1)
AND NOT EXISTS (SELECT 1 FROM tblOrderActivity t3 WHERE t3.OrderID = t1.OrderID AND t3.ActivityID = 4)
 
WRInaute passionné
il veut acticity = 1 et != 4. si c'est égal à 1 ce sera jamais égal à 4

Il ne donne pas son schéma donc on ne sait pas ce que sont ses tables, mais à mon avis
tblOrderActivity contient tous les états d'une commande, donc un même OrderID a plusieurs enregistrements. A chaque changement d'état, il y a une nouvelle ligne, donc il y a aura un enregistrement livré, un autre reçu, etc. Sans supprimer les précédents.
 
Nouveau WRInaute
Je souhaite récupérer les commandes qui ont une activité "Livré" (ActivityID = 1) mais pas une activité "Reçu" (ActivityID = 4) sur la table des commandes. c'est-à-dire les commandes reçues mais pas encore livrées.

ma requête est

Code:
SELECT OrderID FROM tblOrderActivity

where (tblOrderActivity.ActivityID = 1 AND tblOrderActivity.ActivityID != 4)
GROUP BY OrderID

Il ne renvoie pas le résultat souhaité. le résultat devrait être orderID 2 et 4. Quelqu'un peut-il me guider avec une bonne ressource pour lire et apprendre le concept d'une bonne manière avec des exemples ? Je suis cet article sur pas égal en SQL.
Ma première question serait de savoir cette requête renvoi quel résultat ? Vous aviez écrit que vous voudriez qu'elle renvoie les éléments 2 et 4 issus de la colonne OrderID. Essaie d'abord d'enlever les entre parenthèses sur WHERE, je doute que cela influence les résultats de la requête, parce qu'à mon avis je ne trouve pas assez d'erreur dans ta requête, à part ces parenthèses que je trouve plutôt inappropriées pour SQL
 
Discussions similaires
Haut