Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
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 23/11/2011, 21h26   #1
Invité de passage
 
Inscription : janvier 2009
Messages : 9
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 9
Points : 0
Points : 0
Par défaut Problème de jointure ?

Voilà, j'ai 2 requêtes:

Requête 1:

Code :
1
2
3
4
SELECT Area.org, Supervisors.NomSup, Supervisors.PrenomSup, Employees.NomEmp, Employees.PrenomEmp, Employees.NoIdAlcanEmp, Competencies.CodeCompetencies, Competencies.CompetencyName
FROM ((Area INNER JOIN Supervisors ON Area.IdArea = Supervisors.IdArea) INNER JOIN Employees ON Supervisors.IdSupervisor = Employees.IdSupervisor) INNER JOIN ((Profiles INNER JOIN LinkProfilesEmployees ON Profiles.IdProfiles = LinkProfilesEmployees.IdProfiles) INNER JOIN (Competencies INNER JOIN LinkProfComp ON Competencies.IdCompetencies = LinkProfComp.IdCompetencies) ON Profiles.IdProfiles = LinkProfComp.IdProfiles) ON Employees.IdEmp = LinkProfilesEmployees.IdEmp
WHERE (((Area.org) Like "20*") AND ((Competencies.CodeCompetencies) Like "khse2010-05"))
ORDER BY Supervisors.NomSup, Employees.NomEmp;
DONNE 78 résultats

requête 2:


Code :
1
2
3
4
SELECT Area.org, Supervisors.NomSup, Supervisors.PrenomSup, Employees.NomEmp, Employees.PrenomEmp, Employees.NoIdAlcanEmp, Competencies.CodeCompetencies, Competencies.CompetencyName, LinkResultComp.AssNote, LinkResultComp.AssDate
FROM ((Profiles INNER JOIN (((Area INNER JOIN Supervisors ON Area.IdArea = Supervisors.IdArea) INNER JOIN Employees ON Supervisors.IdSupervisor = Employees.IdSupervisor) INNER JOIN LinkProfilesEmployees ON Employees.IdEmp = LinkProfilesEmployees.IdEmp) ON Profiles.IdProfiles = LinkProfilesEmployees.IdProfiles) INNER JOIN (Competencies INNER JOIN LinkProfComp ON Competencies.IdCompetencies = LinkProfComp.IdCompetencies) ON Profiles.IdProfiles = LinkProfComp.IdProfiles) INNER JOIN LinkResultComp ON (Employees.IdEmp = LinkResultComp.IdEmp) AND (Competencies.IdCompetencies = LinkResultComp.IdCompetencies)
WHERE (((Area.org) Like "*20*") AND ((Competencies.CodeCompetencies) Like "khse2010-05"))
ORDER BY Supervisors.NomSup, Employees.NomEmp;
DONNE 48 résultats (ce sont 48 employés qui ont une correspondance dans la table LinkResultComp. Les 30 autres n'en ont pas, mais je veux les afficher quand même...).

Ce que je veux, c'est que les 78 enregistrements apparaissent même s'il n'y a pas de valeur dans la table LinkResultComp pour un employé donné. Suis-je assez clair ???

Merci de votre aide.

Daniel
furannagoran est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 22h07   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 647
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 647
Points : 2 644
Points : 2 644
bonjour,


connaissez-vous les jointures externes ? (left/right outer join)


un peu de lecture et ca devrait aller : http://sqlpro.developpez.com/cours/sqlaz/jointures/
punkoff est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 23h20   #3
Invité de passage
 
Inscription : janvier 2009
Messages : 9
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 9
Points : 0
Points : 0
Par défaut oui mais...

On parle toujours de jointure entre 2 tables mais moi je ne comprends pas. SVP un exemple avec mon code serait apprécié.

Daniel
furannagoran est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 23h33   #4
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 647
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 647
Points : 2 644
Points : 2 644
SVP, lisez, comprenez, adaptez ...

les exemples dans ce cours sont parlant si vous ne comprenez pas quelque chose revenez avec vos essai et expliquez votre (vos) problèmes.
punkoff est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 14h56   #5
Invité de passage
 
Inscription : janvier 2009
Messages : 9
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 9
Points : 0
Points : 0
Par défaut Un essai

J'ai essayé cela mais ça ne marche pas (voir gras). J'ai lu le document sur les jointures mais que faut-il faire quand il y a plusieurs tables en jeu? Dans le document c'est bien expliqué mais avec 2 tables seulement.


Code :
1
2
3
4
SELECT Area.org, Supervisors.NomSup, Supervisors.PrenomSup, Employees.NomEmp, Employees.PrenomEmp, Employees.NoIdAlcanEmp, Competencies.CodeCompetencies, Competencies.CompetencyName, LinkResultComp.AssNote, LinkResultComp.AssDate


FROM ((Area INNER JOIN Supervisors ON Area.IdArea = Supervisors.IdArea) INNER JOIN Employees ON Supervisors.IdSupervisor = Employees.IdSupervisor) INNER JOIN (((Profiles INNER JOIN LinkProfilesEmployees ON Profiles.IdProfiles = LinkProfilesEmployees.IdProfiles) INNER JOIN (Competencies INNER JOIN LinkProfComp ON Competencies.IdCompetencies = LinkProfComp.IdCompetencies) ON Profiles.IdProfiles = LinkProfComp.IdProfiles) LEFT OUTER JOIN LinkResultComp ON Competencies.IdCompetencies = LinkResultComp.IdCompetencies) ON (Employees.IdEmp = LinkResultComp.IdEmp) AND (Employees.IdEmp = LinkProfilesEmployees.IdEmp)



WHERE (((Area.org) Like "*20*") AND ((Competencies.CodeCompetencies) Like "khse2010-05"))
ORDER BY Supervisors.NomSup, Employees.NomEmp;
furannagoran est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 15h07   #6
Membre Expert
 
Avatar de lola06
 
Femme Laure
Consultante en Business Intelligence
Inscription : avril 2007
Messages : 978
Détails du profil
Informations personnelles :
Nom : Femme Laure
Âge : 25
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Consultante en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : avril 2007
Messages : 978
Points : 1 681
Points : 1 681
Bonjour,

Pensez à mettre le code dans les balises ça sera beaucoup plus lisible !!

Qu'est ce qui marche pas exactement ? Le résultat renvoyé n'est pas bon ou la requête ne s’exécute pas ?
__________________
~ Lola ~

Ne pas oublier :
et aussi :
lola06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 15h17   #7
Invité de passage
 
Inscription : janvier 2009
Messages : 9
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 9
Points : 0
Points : 0
Par défaut Erreur

Je reçois ce message: Expression JOIN non supportée.

Merci de ton aide.
furannagoran est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 15h23   #8
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 647
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 647
Points : 2 644
Points : 2 644
Bonjour,

A quoi vous serve toutes ces parenthèses ?

Là elles vous bride et vous empeche de faire une jointure externe.

Enlevez-les et ca devrait mieux marcher (ou alors j'ai loupé un truc).


Si je ne me suis pas trompé dans la ré-écriture des jointures :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
SELECT Area.org, Supervisors.NomSup, Supervisors.PrenomSup, Employees.NomEmp, 
Employees.PrenomEmp, Employees.NoIdAlcanEmp, Competencies.CodeCompetencies, Competencies.CompetencyName, 
LinkResultComp.AssNote, LinkResultComp.AssDate
FROM Area 
INNER JOIN Supervisors ON Area.IdArea = Supervisors.IdArea
INNER JOIN Employees ON Supervisors.IdSupervisor = Employees.IdSupervisor
INNER JOIN LinkProfilesEmployees ON Employees.IdEmp = LinkProfilesEmployees.IdEmp
INNER JOIN Profiles ON Profiles.IdProfiles = LinkProfilesEmployees.IdProfiles
INNER JOIN LinkProfComp ON Profiles.IdProfiles = LinkProfComp.IdProfiles
INNER JOIN Competencies ON Competencies.IdCompetencies = LinkProfComp.IdCompetencies
LEFT OUTER JOIN LinkResultComp ON Competencies.IdCompetencies = LinkResultComp.IdCompetencies AND Employees.IdEmp = LinkResultComp.IdEmp
 
WHERE Area.org Like "*20*" AND Competencies.CodeCompetencies Like "khse2010-05"
ORDER BY Supervisors.NomSup, Employees.NomEmp;
punkoff est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 15h23   #9
Membre Expert
 
Avatar de lola06
 
Femme Laure
Consultante en Business Intelligence
Inscription : avril 2007
Messages : 978
Détails du profil
Informations personnelles :
Nom : Femme Laure
Âge : 25
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Consultante en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : avril 2007
Messages : 978
Points : 1 681
Points : 1 681
Sous quel SGBD es-tu ?
Edit ton message pour formater le code !!!
__________________
~ Lola ~

Ne pas oublier :
et aussi :
lola06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 15h34   #10
Invité de passage
 
Inscription : janvier 2009
Messages : 9
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 9
Points : 0
Points : 0
Par défaut SGDB et résultat du code ci-haut.

Je suis sous Access.
Ton code me donne um message "Opérateur absent..."

Merci
furannagoran est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 15h38   #11
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 647
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 647
Points : 2 644
Points : 2 644
les parenthèses sont obligatoires après un "ON" sous acces ?

edit: et sinon vous n'avez pas le numéro de lignes de l'erreur pour que celà soit un peu plus parlant ?
punkoff est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 15h49   #12
Membre Expert
 
Avatar de lola06
 
Femme Laure
Consultante en Business Intelligence
Inscription : avril 2007
Messages : 978
Détails du profil
Informations personnelles :
Nom : Femme Laure
Âge : 25
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Consultante en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : avril 2007
Messages : 978
Points : 1 681
Points : 1 681
Citation:
Envoyé par punkoff Voir le message
les parenthèses sont obligatoires après un "ON" sous acces ?
Après petite recherche : pas besoin de parenthèses.

@furannagoran peut-être tu devrais lire ce tuto, il est pour le SQL appliqué à Access.
__________________
~ Lola ~

Ne pas oublier :
et aussi :
lola06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 15h50   #13
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 647
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 647
Points : 2 644
Points : 2 644
http://www.developpez.net/forums/d40...es-sql-access/


Du coup les parenthèses étaient utile, il faut juste déplacer le LEFT OUTER JOIN en dernier donc est-ce que ceci marche ?
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
SELECT Area.org, Supervisors.NomSup, Supervisors.PrenomSup, Employees.NomEmp, 
Employees.PrenomEmp, Employees.NoIdAlcanEmp, Competencies.CodeCompetencies, Competencies.CompetencyName, 
LinkResultComp.AssNote, LinkResultComp.AssDate
FROM ((((((Area 
INNER JOIN Supervisors ON Area.IdArea = Supervisors.IdArea)
INNER JOIN Employees ON Supervisors.IdSupervisor = Employees.IdSupervisor)
INNER JOIN LinkProfilesEmployees ON Employees.IdEmp = LinkProfilesEmployees.IdEmp)
INNER JOIN Profiles ON Profiles.IdProfiles = LinkProfilesEmployees.IdProfiles)
INNER JOIN LinkProfComp ON Profiles.IdProfiles = LinkProfComp.IdProfiles)
INNER JOIN Competencies ON Competencies.IdCompetencies = LinkProfComp.IdCompetencies)
LEFT OUTER JOIN LinkResultComp ON Competencies.IdCompetencies = LinkResultComp.IdCompetencies AND Employees.IdEmp = LinkResultComp.IdEmp
 
WHERE Area.org LIKE "*20*" AND Competencies.CodeCompetencies LIKE "khse2010-05"
ORDER BY Supervisors.NomSup, Employees.NomEmp;

edit : et en reprenant votre requete initiale, il faut déplacer la condition de jointure à l'intérieur de la parenthèse sinon Access va effectuer une jointure interne :

Code :
1
2
3
4
5
6
7
8
9
10
11
 
SELECT Area.org, Supervisors.NomSup, Supervisors.PrenomSup, Employees.NomEmp, Employees.PrenomEmp, 
Employees.NoIdAlcanEmp, Competencies.CodeCompetencies, Competencies.CompetencyName, 
LinkResultComp.AssNote, LinkResultComp.AssDate
FROM ((Area INNER JOIN Supervisors ON Area.IdArea = Supervisors.IdArea) 
INNER JOIN Employees ON Supervisors.IdSupervisor = Employees.IdSupervisor) 
INNER JOIN (((Profiles INNER JOIN LinkProfilesEmployees ON Profiles.IdProfiles = LinkProfilesEmployees.IdProfiles) 
INNER JOIN (Competencies INNER JOIN LinkProfComp ON Competencies.IdCompetencies = LinkProfComp.IdCompetencies) ON Profiles.IdProfiles = LinkProfComp.IdProfiles) 
LEFT OUTER JOIN LinkResultComp ON Competencies.IdCompetencies = LinkResultComp.IdCompetencies AND Employees.IdEmp = LinkResultComp.IdEmp) ON  (Employees.IdEmp = LinkProfilesEmployees.IdEmp) 
WHERE (((Area.org) Like "*20*") AND ((Competencies.CodeCompetencies) Like "khse2010-05"))
ORDER BY Supervisors.NomSup, Employees.NomEmp;
punkoff est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 15h58   #14
Invité de passage
 
Inscription : janvier 2009
Messages : 9
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 9
Points : 0
Points : 0
Par défaut Parentheses

Les parentheses sont générées auto quand je fais ma requête.

Le message d'erreur que j'ai avec ton code est le suivant. Voir image. Merci de l'aide, j'en suis à mes débuts dans les jointures externes.



Daniel
furannagoran est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 16h03   #15
Invité de passage
 
Inscription : janvier 2009
Messages : 9
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 9
Points : 0
Points : 0
Par défaut essai

Non, le message d'erreur est "Expression join non supportée"
furannagoran est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h49.


 
 
 
 
Partenaires

Hébergement Web