OVH Cloud OVH Cloud

Comparaison

7 réponses
Avatar
paul
J'ai 2 tables:

- l'une contient: Identifiant, Nom, Prenom, Bureau
- l'autre contient les m=EAmes champs

comment faire pour connaitre les personnes qui ont un m=EAme=20
identifiant mais un bureau different entre les 2 tables

7 réponses

Avatar
Michel Walsh
Salut,

Si les tables se nomment a et b:


SELECT q.nom, q.prenom
FROM (( SELECT nom, prenom, bureau FROM a
UNION
SELECT nom, prenom, bureau FROM b) As
q LEFT JOIN a
ON a.nom=q.nom
AND a.prenom=q.prenom
AND a.bureau=q.bureau

) LEFT JOIN b
ON b.nom=q.nom
AND b.prenom=q.prenom
AND b.bureau=q.bureau

GROUP BY q.nom, q.prenom, q.bureau
HAVING COUNT(*) = 2


Une partie de la complexité est que Jet ne possède pas de FULL JOIN, ce que
je contourne avec le UNION.

Une fois les joins externes (équivalents à un FULL JOIN) exécutés, mais
avant aggrégation (groupement), on trouve, pour un utilisateur donné:

- S'il a un bureau dans a, mais pas dans b, le décompte sera de 1.
- S'il a un bureau dans b, mais pas dans a, le décompte sera de 1.
- S'il a le même bureau dans a et dans b, le décompte sera de 1. De
plus, a.bureau = b.bureau=q.bureau.
- S'il a un bureau différent dans a et dans b, son décompte est de
2. En effet, avant aggrégation, on a un enregistrement avec a.bureau IS
NULL (avec son b.bureau= q.bureau, non null), et un autre avec b.bureau IS
NULL (mais avec son a.bureau=q.bureau, non null), pour cet utilisateur.



Espérant être utile,
Vanderghast, Access MVP



"paul" wrote in message
news:010501c3b827$a665f180$
J'ai 2 tables:

- l'une contient: Identifiant, Nom, Prenom, Bureau
- l'autre contient les mêmes champs

comment faire pour connaitre les personnes qui ont un même
identifiant mais un bureau different entre les 2 tables
Avatar
paul
je ne comprends pas à quoi correspond q


-----Message d'origine-----
Salut,

Si les tables se nomment a et b:


SELECT q.nom, q.prenom
FROM (( SELECT nom, prenom, bureau FROM a
UNION
SELECT nom, prenom, bureau FROM b) As
q LEFT JOIN a
ON a.nom=q.nom
AND a.prenom=q.prenom
AND a.bureau=q.bureau

) LEFT JOIN b
ON b.nom=q.nom
AND b.prenom=q.prenom
AND b.bureau=q.bureau

GROUP BY q.nom, q.prenom, q.bureau
HAVING COUNT(*) = 2


Une partie de la complexité est que Jet ne possède pas de
FULL JOIN, ce que

je contourne avec le UNION.

Une fois les joins externes (équivalents à un FULL JOIN)
exécutés, mais

avant aggrégation (groupement), on trouve, pour un
utilisateur donné:


- S'il a un bureau dans a, mais pas dans b, le
décompte sera de 1.

- S'il a un bureau dans b, mais pas dans a, le
décompte sera de 1.

- S'il a le même bureau dans a et dans b, le
décompte sera de 1. De

plus, a.bureau = b.bureau=q.bureau.
- S'il a un bureau différent dans a et dans b,
son décompte est de

2. En effet, avant aggrégation, on a un enregistrement
avec a.bureau IS

NULL (avec son b.bureau= q.bureau, non null), et un autre
avec b.bureau IS

NULL (mais avec son a.bureau=q.bureau, non null), pour
cet utilisateur.




Espérant être utile,
Vanderghast, Access MVP



"paul" wrote in
message

news:010501c3b827$a665f180$
J'ai 2 tables:

- l'une contient: Identifiant, Nom, Prenom, Bureau
- l'autre contient les mêmes champs

comment faire pour connaitre les personnes qui ont un même
identifiant mais un bureau different entre les 2 tables


.



Avatar
Raymond [mvp]
Bonjour.

Le temps que Michel arrive pour t'expliquer tout ce qu'il a fait, q est le
nom de la sous-requête union
UNION
SELECT nom, prenom, bureau FROM b) As
q LEFT JOIN a
et pour faire appel aux champs il doit indiquer la source qui est q.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour une meilleure
efficacité de tes interventions sur MPFA


"paul" a écrit dans le message de
news:023001c3b8b3$420dc000$
je ne comprends pas à quoi correspond q

Avatar
paul
En reprennant les informations que m'a donné Michel voilà
ce que j'obtiens

DATA correpond à la table a
A_Utilisateur_Tel_Bureau_Service correpond à la table b




SELECT q.nom, q.prenom, q.bureau
FROM (( SELECT Te_Nom, Te_Prenom,[Bur AP] FROM DATA
UNION
SELECT N_UTIL, PRE_UTIL, N_SITE_3 FROM
A_Utilisateur_Tel_Bureau_Service) As
q LEFT JOIN A_Utilisateur_Tel_Bureau_Service
ON DATA.Te_Nom=q.nom
AND DATA.Te_Prenom=q.prenom
AND DATA.[Bur AP]=q.bureau

) LEFT JOIN A_Utilisateur_Tel_Bureau_Service
ON
A_Utilisateur_Tel_Bureau_Service.N_UTIL=q.nom
AND
A_Utilisateur_Tel_Bureau_Service.PRE_UTIL=q.prenom
AND
A_Utilisateur_Tel_Bureau_Service.N_SITE_3=q.bureau

GROUP BY q.nom, q.prenom, q.bureau
HAVING COUNT(*) = 2



Mais j'ai le message Erreur de syntaxe dans l'opération
JOIN


-----Message d'origine-----
Bonjour.

Le temps que Michel arrive pour t'expliquer tout ce qu'il
a fait, q est le

nom de la sous-requête union
UNION
SELECT nom, prenom, bureau FROM b) As
q LEFT JOIN a
et pour faire appel aux champs il doit indiquer la source

qui est q.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour une meilleure
efficacité de tes interventions sur MPFA


"paul" a écrit dans
le message de

news:023001c3b8b3$420dc000$
je ne comprends pas à quoi correspond q



.




Avatar
Raymond [mvp]
si tu as une inversion de champs entre les tables de départ, inverse les
champs dans ta requête union pour ajuster à la réalité. Michel va passer
bientôt, je n'ai pas suivi les fils.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour une meilleure
efficacité de tes interventions sur MPFA


"paul" a écrit dans le message de
news:08d201c3b8bc$a61f7df0$
En reprennant les informations que m'a donné Michel voilà
ce que j'obtiens

DATA correpond à la table a
A_Utilisateur_Tel_Bureau_Service correpond à la table b




SELECT q.nom, q.prenom, q.bureau
FROM (( SELECT Te_Nom, Te_Prenom,[Bur AP] FROM DATA
UNION
SELECT N_UTIL, PRE_UTIL, N_SITE_3 FROM
A_Utilisateur_Tel_Bureau_Service) As
q LEFT JOIN A_Utilisateur_Tel_Bureau_Service
ON DATA.Te_Nom=q.nom
AND DATA.Te_Prenom=q.prenom
AND DATA.[Bur AP]=q.bureau

) LEFT JOIN A_Utilisateur_Tel_Bureau_Service
ON
A_Utilisateur_Tel_Bureau_Service.N_UTIL=q.nom
AND
A_Utilisateur_Tel_Bureau_Service.PRE_UTIL=q.prenom
AND
A_Utilisateur_Tel_Bureau_Service.N_SITE_3=q.bureau

GROUP BY q.nom, q.prenom, q.bureau
HAVING COUNT(*) = 2



Mais j'ai le message Erreur de syntaxe dans l'opération
JOIN


-----Message d'origine-----
Bonjour.

Le temps que Michel arrive pour t'expliquer tout ce qu'il
a fait, q est le

nom de la sous-requête union
UNION
SELECT nom, prenom, bureau FROM b) As
q LEFT JOIN a
et pour faire appel aux champs il doit indiquer la source

qui est q.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour une meilleure
efficacité de tes interventions sur MPFA


"paul" a écrit dans
le message de

news:023001c3b8b3$420dc000$
je ne comprends pas à quoi correspond q



.




Avatar
paul
j'ai inversé mais j'ai toujours le même message d'erreur

-----Message d'origine-----
si tu as une inversion de champs entre les tables de
départ, inverse les

champs dans ta requête union pour ajuster à la réalité.
Michel va passer

bientôt, je n'ai pas suivi les fils.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour une meilleure
efficacité de tes interventions sur MPFA


"paul" a écrit dans
le message de

news:08d201c3b8bc$a61f7df0$
En reprennant les informations que m'a donné Michel voilà
ce que j'obtiens

DATA correpond à la table a
A_Utilisateur_Tel_Bureau_Service correpond à la table b




SELECT q.nom, q.prenom, q.bureau
FROM (( SELECT Te_Nom, Te_Prenom,[Bur AP] FROM DATA
UNION
SELECT N_UTIL, PRE_UTIL, N_SITE_3 FROM
A_Utilisateur_Tel_Bureau_Service) As
q LEFT JOIN A_Utilisateur_Tel_Bureau_Service
ON DATA.Te_Nom=q.nom
AND DATA.Te_Prenom=q.prenom
AND DATA.[Bur AP]=q.bureau

) LEFT JOIN A_Utilisateur_Tel_Bureau_Service
ON
A_Utilisateur_Tel_Bureau_Service.N_UTIL=q.nom
AND
A_Utilisateur_Tel_Bureau_Service.PRE_UTIL=q.prenom
AND
A_Utilisateur_Tel_Bureau_Service.N_SITE_3=q.bureau

GROUP BY q.nom, q.prenom, q.bureau
HAVING COUNT(*) = 2



Mais j'ai le message Erreur de syntaxe dans l'opération
JOIN


-----Message d'origine-----
Bonjour.

Le temps que Michel arrive pour t'expliquer tout ce qu'il
a fait, q est le

nom de la sous-requête union
UNION
SELECT nom, prenom, bureau FROM b) As
q LEFT JOIN a
et pour faire appel aux champs il doit indiquer la source

qui est q.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour une meilleure
efficacité de tes interventions sur MPFA


"paul" a écrit dans
le message de

news:023001c3b8b3$420dc000$
je ne comprends pas à quoi correspond q



.




.





Avatar
Michel Walsh
Salut,


Le premier join dit:


q LEFT JOIN A_Utilisateur_Tel_Bureau_Service
ON DATA.Te_Nom=q.nom
AND DATA.Te_Prenom=q.prenom
AND DATA.[Bur AP]=q.bureau

il devrait dire:


q LEFT JOIN A_Utilisateur_Tel_Bureau_Service
ON A_Utilisateur_Tel_Bureau_Service.Te_Nom=q.nom
AND A_Utilisateur_Tel_Bureau_Service.Te_Prenom=q.prenom
AND A_Utilisateur_Tel_Bureau_Service.[Bur AP]=q.bureau


car DATA est une entité inconnue.



Espérant être utile, ( et pas trop tard)
Vanderghast, Access MVP


"paul" wrote in message
news:b04001c3b8c1$444de3a0$
j'ai inversé mais j'ai toujours le même message d'erreur

-----Message d'origine-----
si tu as une inversion de champs entre les tables de
départ, inverse les

champs dans ta requête union pour ajuster à la réalité.
Michel va passer

bientôt, je n'ai pas suivi les fils.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour une meilleure
efficacité de tes interventions sur MPFA


"paul" a écrit dans
le message de

news:08d201c3b8bc$a61f7df0$
En reprennant les informations que m'a donné Michel voilà
ce que j'obtiens

DATA correpond à la table a
A_Utilisateur_Tel_Bureau_Service correpond à la table b




SELECT q.nom, q.prenom, q.bureau
FROM (( SELECT Te_Nom, Te_Prenom,[Bur AP] FROM DATA
UNION
SELECT N_UTIL, PRE_UTIL, N_SITE_3 FROM
A_Utilisateur_Tel_Bureau_Service) As
q LEFT JOIN A_Utilisateur_Tel_Bureau_Service
ON DATA.Te_Nom=q.nom
AND DATA.Te_Prenom=q.prenom
AND DATA.[Bur AP]=q.bureau

) LEFT JOIN A_Utilisateur_Tel_Bureau_Service
ON
A_Utilisateur_Tel_Bureau_Service.N_UTIL=q.nom
AND
A_Utilisateur_Tel_Bureau_Service.PRE_UTIL=q.prenom
AND
A_Utilisateur_Tel_Bureau_Service.N_SITE_3=q.bureau

GROUP BY q.nom, q.prenom, q.bureau
HAVING COUNT(*) = 2



Mais j'ai le message Erreur de syntaxe dans l'opération
JOIN


-----Message d'origine-----
Bonjour.

Le temps que Michel arrive pour t'expliquer tout ce qu'il
a fait, q est le

nom de la sous-requête union
UNION
SELECT nom, prenom, bureau FROM b) As
q LEFT JOIN a
et pour faire appel aux champs il doit indiquer la source

qui est q.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour une meilleure
efficacité de tes interventions sur MPFA


"paul" a écrit dans
le message de

news:023001c3b8b3$420dc000$
je ne comprends pas à quoi correspond q



.




.