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

cs_Eric25 175 Messages postés mardi 19 octobre 2004Date d'inscription 26 juin 2006 Dernière intervention - 9 févr. 2005 à 21:48 - Dernière réponse : cs_Eric25 175 Messages postés mardi 19 octobre 2004Date d'inscription 26 juin 2006 Dernière intervention
- 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
mrdep1978 402 Messages postés jeudi 25 novembre 2004Date d'inscription 7 juin 2009 Dernière intervention - 10 févr. 2005 à 11:30
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

Merci mrdep1978 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 91 internautes ce mois-ci

cs_Eric25 175 Messages postés mardi 19 octobre 2004Date d'inscription 26 juin 2006 Dernière intervention - 10 févr. 2005 à 14:00
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.