Syntaxe d'une requête avec IN() ou EXISTS() [Résolu]

Messages postés
175
Date d'inscription
mardi 19 octobre 2004
Dernière intervention
26 juin 2006
- - Dernière réponse : cs_Eric25
Messages postés
175
Date d'inscription
mardi 19 octobre 2004
Dernière intervention
26 juin 2006
- 10 févr. 2005 à 14:00
Bonsoir,

Je n'arrive pas à trouver la syntaxe correcte pour une requête que j'ai écrite à la base en utilisant NOT IN. Voici la requête :

Rs_Sup.Open "SELECT * FROM SUPPLEMENT WHERE Lib_Sup NOT IN(SELECT S.Lib_Sup, SUM(quantite) AS [Somme], Tar_Sup FROM Contenir AS C, COMMANDE AS CO, SUPPLEMENT AS S WHERE YEAR(Dat_Com)='" & annee & "' AND MONTH(Dat_Com)='" & mois & "' AND Valide_Com=1 AND C.Num_Com=CO.Num_Com AND S.Lib_Sup=C.Lib_Sup GROUP BY S.Lib_Sup, Tar_Sup) ORDER BY Lib_Sup", Cn

le message d'erreur de VB me dit "Une seule expression peut etre spécifiée dans la liste de sélection quand la sous requête n'est pas introduite par EXISTS".
J'ai bien cherché dans msdn et sur le site mais je n'arrive pas à comprendre comment articuler la fonction EXISTS.

Merci d'avance
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
402
Date d'inscription
jeudi 25 novembre 2004
Dernière intervention
7 juin 2009
3
3
Merci
Tu peux faire un IN (ou un NOT IN) uniquement si tu compares le même nombre de champs !
Tu n'as donc plus besoin du GROUP BY et tu peux le remplacer par un DISTINCT

SELECT *
FROM
SUPPLEMENT
WHERE Lib_Sup
NOT IN
(
SELECT DISTINCT S.Lib_Sup<STRIKE>, SUM(quantite) AS [Somme], Tar_Sup</STRIKE>
FROM
Contenir AS C,
COMMANDE AS CO,
SUPPLEMENT AS S
WHERE YEAR(Dat_Com)= '" & annee & "'
AND MONTH(Dat_Com)='" & mois & "'
AND Valide_Com=1
AND C.Num_Com=CO.Num_Com
AND S.Lib_Sup=C.Lib_Sup
<STRIKE>GROUP BY S.Lib_Sup, Tar_Sup</STRIKE>
)
ORDER BY Lib_Sup

Si tu veux utiliser le NOT EXISTS, ça donne ceci :
SELECT *
FROM
SUPPLEMENT
WHERE NOT EXISTS
(
SELECT 1
FROM
Contenir AS C,
COMMANDE AS CO
WHERE YEAR(Dat_Com) ='" & annee & "'
AND MONTH(Dat_Com)='" & mois & "'
AND Valide_Com=1
AND C.Num_Com=CO.Num_Com
AND SUPPLEMENT.Lib_Sup=C.Lib_Sup
)
ORDER BY Lib_Sup

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 114 internautes nous ont dit merci ce mois-ci

Messages postés
175
Date d'inscription
mardi 19 octobre 2004
Dernière intervention
26 juin 2006
5
0
Merci
Merci beaucoup,

Ah oui forcement, j'avais repris ma première requête et forcement le group by et les autres champs sont inutiles.
Petite question pour le NOT EXISTS, le 1 se réfèrè à quoi?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.