Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access
Access Forum d'entraide sur Microsoft Access. Avant de poster -> La F.A.Q Access
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/04/2011, 14h54   #1
Candidat au titre de Membre du Club
 
Homme philippe tchaidjian
salarié
Inscription : mars 2011
Messages : 49
Détails du profil
Informations personnelles :
Nom : Homme philippe tchaidjian
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : salarié
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 49
Points : 13
Points : 13
Par défaut Opérateur logique XOR

Bonjour à tous

je code en SQL pr requêter sur des tables d'une BdD MS-Access.

J'ai un pb avec l'opérateur XOR, reconnu par SQL pr MS-Access, mais qui ne me donne pas les résulats attendus, et je ne comprends pas prquoi ..

Je cherche les commandes portant sur le produit 'PA45' ou (exclusif de l'autre) le produit 'PA60', mais pas les deux, sachant qu'à une commande peuvent être associés plusieurs produits, dt les deux cités ci-dessus, ou d'autres.

Voici le texte de ma requête :
Code :
1
2
3
SELECT distinct Ncom
FROM T_Detail
WHERE ((Npro = 'PA45') XOR (Npro = 'PA60'))
et ds le résultat j'obtiens un N° de commande qui contient entre autres les deux produits.

Je ne comprends pas prquoi !

Pouvez-vs m'aider svp ? m'expliquer ?

merci d'avance
pppa1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2011, 16h39   #2
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 462
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 462
Points : 7 539
Points : 7 539
Je ne comprend pas l'utilisation de XOR pour une sélection de champ.

Si tu veux tout les enregistrements qui ont soit Npro = "PA45" ou "PA60".

Code sql :
WHERE [NPro]="PA45" OR [NPro]="PA60"

si tu veux les enregistrements qui n'ont pas Npro = "PA45" ou "PA60"

Code sql :
WHERE [NPro]<>"PA45" AND [NPro]<>"PA60"

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2011, 16h58   #3
Candidat au titre de Membre du Club
 
Homme philippe tchaidjian
salarié
Inscription : mars 2011
Messages : 49
Détails du profil
Informations personnelles :
Nom : Homme philippe tchaidjian
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : salarié
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 49
Points : 13
Points : 13
Je veux ici pouvoir déterminer les commandes qui ont été passées soit pr le produit 'PA45', soit pr le produit 'PA60', mais pas pr les deux simultanément.

C'est dc bien - a priori - le connecteur XOR qu'il convient d'utiliser ? Sommes-ns d'accord là-dessus ? Si oui, alors ma question demeure : prquoi je récupère la commande qui porte sur ces 2 produits simultanément (avec d'autres produits par ailleurs) ?

Est-ce que je me fais bien comprendre ?

merci de me dire

pppa1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2011, 17h17   #4
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonjour Pppa1 et Marot_r,

Il semble que T_Detail contienne 1 ligne par produit, non ?

Code T_Detail :
1
2
3
4
5
6
7
NCom  NPro
123   PA45
456   PA60
456   PA45
789   PX99
789   PA45
...
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2011, 17h22   #5
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Formateur et Développeur - Conseil en Informatique
Inscription : juin 2002
Messages : 3 687
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 42
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Formateur et Développeur - Conseil en Informatique

Informations forums :
Inscription : juin 2002
Messages : 3 687
Points : 6 516
Points : 6 516
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
Salut

Une requête travaille sur une source de données.
Ici, la source de données c'est ta table.

La requête analyse les lignes une par une.
Y a-t-il une ligne contenant les deux produit ?
===> Non.
Donc, ton test ne renvoie TOUJOURS VRAI dès l'existence de l'un de ces produits, et tu récupères deux lignes pour ta commande en question..

j'ai tout bon ?


PS ... Zut !
grillé par richard
__________________
1formaxion, une formation de qualité, des formateurs compétents
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2011, 17h49   #6
Candidat au titre de Membre du Club
 
Homme philippe tchaidjian
salarié
Inscription : mars 2011
Messages : 49
Détails du profil
Informations personnelles :
Nom : Homme philippe tchaidjian
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : salarié
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 49
Points : 13
Points : 13
Merci Maxence, merci Richard

>>Richard
la table ressemble à ce que tu as deviné, disons que pr la commande 456 on pourrait rajouter un autre produit différent des deux produits 'PA45' et 'PA60'.

>>Maxence, je comprends ce que tu veux dire, et comment est "interprétée" la requête qui sélectionne des enregistrements de table.

Ma question est alors : comment sélectionner les commandes pr lesquelles seul un des deux produits précités apparaît (dc pas les deux simultanément) ? Ca doit être possible

Je pense qu'il faut oublier une requête simple avec l'opérateur XOR.

Je pense à des imbrications de sous requêtes..

Qu'en pensez-vous ?

merci de me dire
pppa1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2011, 17h59   #7
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Formateur et Développeur - Conseil en Informatique
Inscription : juin 2002
Messages : 3 687
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 42
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Formateur et Développeur - Conseil en Informatique

Informations forums :
Inscription : juin 2002
Messages : 3 687
Points : 6 516
Points : 6 516
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
Code :
1
2
3
SELECT distinct Ncom
FROM T_Detail
WHERE dcount("Npro","T_Detai","Ncom=" & Ncom & " AND Npro='PA45'")<>0 XOR dcount("Npro","T_Detai","Ncom=" & Ncom & " AND Npro='PA60'
Et comme ça, ca dit quoi ?
__________________
1formaxion, une formation de qualité, des formateurs compétents
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2011, 18h01   #8
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 410
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 410
Points : 4 439
Points : 4 439
Bonjour à tous,

Si l’unicité du couple (Ncom, Nprod) est assurée, on peut écrire :

Code sql :
1
2
3
4
5
SELECT Ncom
FROM T_Detail
WHERE Npro IN ('PA45', 'PA60')
GROUP BY Ncom
HAVING Count(*)<2;
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 25/04/2011, 18h13   #9
Modérateur
 
Homme Christophe CHAPAT
Spécialiste progiciel
Inscription : février 2010
Messages : 984
Détails du profil
Informations personnelles :
Nom : Homme Christophe CHAPAT
Âge : 25
Localisation : France, Haute Loire (Auvergne)

Informations professionnelles :
Activité : Spécialiste progiciel
Secteur : Service public

Informations forums :
Inscription : février 2010
Messages : 984
Points : 1 592
Points : 1 592
Envoyer un message via MSN à carden752
Bonjour,

En logique binaire un "ou exclusif" correspond à cela :
Code :
a xor b = (a and  not b) or (not a and b)
En l'appliquant à ton problème, tu as
Code :
1
2
3
SELECT distinct Ncom
FROM T_Detail
WHERE ((Npro = 'PA45' and Npro <> 'PA60') OR (Npro = 'PA60' and Npro <> 'PA45' ))
__________________
Cordialement,
Christophe

Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche
carden752 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2011, 20h28   #10
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Formateur et Développeur - Conseil en Informatique
Inscription : juin 2002
Messages : 3 687
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 42
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Formateur et Développeur - Conseil en Informatique

Informations forums :
Inscription : juin 2002
Messages : 3 687
Points : 6 516
Points : 6 516
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE

Christophe, cela ne changera rien si ses données sont dans des enregistrements différents
__________________
1formaxion, une formation de qualité, des formateurs compétents
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2011, 20h29   #11
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Formateur et Développeur - Conseil en Informatique
Inscription : juin 2002
Messages : 3 687
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 42
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Formateur et Développeur - Conseil en Informatique

Informations forums :
Inscription : juin 2002
Messages : 3 687
Points : 6 516
Points : 6 516
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
@f-leb

Superbe ! je n'y avais pas pensé, focalisé sur le XOR
Bravo
__________________
1formaxion, une formation de qualité, des formateurs compétents
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2011, 21h09   #12
Modérateur
 
Homme Christophe CHAPAT
Spécialiste progiciel
Inscription : février 2010
Messages : 984
Détails du profil
Informations personnelles :
Nom : Homme Christophe CHAPAT
Âge : 25
Localisation : France, Haute Loire (Auvergne)

Informations professionnelles :
Activité : Spécialiste progiciel
Secteur : Service public

Informations forums :
Inscription : février 2010
Messages : 984
Points : 1 592
Points : 1 592
Envoyer un message via MSN à carden752
Bonjour,

Cela peut servir aussi sans l'unicité du couple avec une sous-requête.

Code :
1
2
3
4
5
6
7
SELECT distinct n.Ncom 
FROM T_Detail as n
WHERE (Npro = 'PA45' and NCom NOT IN  (SELECT distinct Ncom
FROM T_Detail
WHERE Npro = 'PA60' and Ncom=n.Ncom) ) OR (Npro = 'PA60' and NCom NOT IN (SELECT distinct Ncom
FROM T_Detail
WHERE Npro = 'PA45' and Ncom=n.Ncom))
__________________
Cordialement,
Christophe

Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche
carden752 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2011, 22h18   #13
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Formateur et Développeur - Conseil en Informatique
Inscription : juin 2002
Messages : 3 687
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 42
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Formateur et Développeur - Conseil en Informatique

Informations forums :
Inscription : juin 2002
Messages : 3 687
Points : 6 516
Points : 6 516
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
Oui, mais c'est dommage de compliquer vu que le XOR est reconnu par Access...
__________________
1formaxion, une formation de qualité, des formateurs compétents
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2011, 23h42   #14
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonsoir à tous,

... et bravo pour l'astuce, Fabien.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2011, 06h57   #15
Candidat au titre de Membre du Club
 
Homme philippe tchaidjian
salarié
Inscription : mars 2011
Messages : 49
Détails du profil
Informations personnelles :
Nom : Homme philippe tchaidjian
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : salarié
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 49
Points : 13
Points : 13
Maxence a écrit

"Oui, mais c'est dommage de compliquer vu que le XOR est reconnu par Access... "

Oui, je suis bien d'accord ... premier réflexe aussi d'utiliser XOR ds cette situation qd on a une formation à dominante mathématique...

et sans faire de la philosophie de bas étage...on voit là un aspect de la différence entre l'être humain et la machine.

Merci encore à ts ceux qui sont intervenus

pppa1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2011, 11h00   #16
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 410
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 410
Points : 4 439
Points : 4 439
Re,

alors si vous insistez pour avoir du XOR, vous pouvez essayer:


Code sql :
1
2
3
4
5
6
7
8
9
10
SELECT DISTINCT ncom
FROM   t_detail
WHERE  EXISTS (SELECT ''
               FROM   t_detail t
               WHERE  t.ncom = t_detail.ncom
                      AND t.npro = 'PA45')
        XOR EXISTS (SELECT ''
                   FROM   t_detail u
                   WHERE  u.ncom = t_detail.ncom
                          AND u.npro = 'PA60');

[EDIT] finalement assez similaire au code de Maxence du post #7[/EDIT]
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/04/2011, 11h12   #17
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Formateur et Développeur - Conseil en Informatique
Inscription : juin 2002
Messages : 3 687
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 42
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Formateur et Développeur - Conseil en Informatique

Informations forums :
Inscription : juin 2002
Messages : 3 687
Points : 6 516
Points : 6 516
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
hmmmm... je découvre EXISTS...
Ca marche dans Access ça ?
T'es sûr ?

[EDIT]Super ! Effectivement, c'est pris en compte, et j'en ai profité pour découvrir l'arrivée de nouveau termes...
ALL, ANY, SOME bravo et merci ![/EDIT]
__________________
1formaxion, une formation de qualité, des formateurs compétents
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2011, 13h26   #18
Modérateur
 
Homme Christophe CHAPAT
Spécialiste progiciel
Inscription : février 2010
Messages : 984
Détails du profil
Informations personnelles :
Nom : Homme Christophe CHAPAT
Âge : 25
Localisation : France, Haute Loire (Auvergne)

Informations professionnelles :
Activité : Spécialiste progiciel
Secteur : Service public

Informations forums :
Inscription : février 2010
Messages : 984
Points : 1 592
Points : 1 592
Envoyer un message via MSN à carden752
Bonjour,

Citation:
hmmmm... je découvre EXISTS...
Tiens moi aussi je découvre le Exists, c'est ce que je pensais faire au départ.
__________________
Cordialement,
Christophe

Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche
carden752 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2011, 18h46   #19
Candidat au titre de Membre du Club
 
Homme philippe tchaidjian
salarié
Inscription : mars 2011
Messages : 49
Détails du profil
Informations personnelles :
Nom : Homme philippe tchaidjian
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : salarié
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 49
Points : 13
Points : 13
Merci à tous, vous êtes formidables.

Donnent le résultat attendu : requête de Carden752 (celle de 21 h 09) et aussi celle de F_Leb de ce jour.

Je vais pouvoir avancer sur ce cas.
pppa1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h51.


 
 
 
 
Partenaires

Hébergement Web