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 28/02/2011, 17h07   #1
Membre régulier
 
Inscription : juin 2006
Messages : 549
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 549
Points : 98
Points : 98
Par défaut Requête avec jointure

Bonjour à tous,

Voici une petite requête faite à partir de 2 autres requêtes R1 et R2

Code :
1
2
SELECT [R1].ID, [R1].[Valeur], [ID]+1 AS NewID, [R2].Nom
FROM [R2] RIGHT JOIN [R1] ON [R2].ID = [R1].ID;
Ma question est la suivante :
Au lieu de faire le lien entre [R2].ID = [R1].ID je souhaiterai le faire directement entre [R2].ID et le NewID... mais cela ne marche pas :-(


Comment faire svp ?

Merci

A+

Dams'
damsmut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 19h45   #2
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,

comme il y a deux champs nommés [ID], il faut préfixer avec le nom de la table:

Code sql :
SELECT [R1].ID, [R1].[Valeur], [R1].[ID]+1 AS NewID, [R2].Nom

L'affichage des colonnes du SELECT étant traité en dernier, l'alias NewID n'est pas encore connu au moment où le moteur effectue les jointures, la requête devrait logiquement être:
Code sql :
1
2
3
SELECT [R1].ID, [R1].[Valeur], [R1].[ID]+1 AS NewID, [R2].Nom
FROM [R2] RIGHT JOIN [R1] ON [R2].ID = [R1].ID+1;

par contre la jointure n'est pas interprétable par l'assistant graphique...
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/02/2011, 20h28   #3
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 242
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 242
Points : 11 037
Points : 11 037
Bonjour damsmut et f-leb,

Pendant que f-leb répondait, je voulais procéder en deux temps, avec une requête intermédiaire :
Code :
1
2
SELECT [R1].[id], [R1].[Valeur], [id]+1 AS NewId
FROM R1;
et ensuite :

lier cette requête avec la table R2

Code :
1
2
SELECT [R2].[id], [R2].[Nom]
FROM R2 INNER JOIN RequêteIntermediaire ON [R2].[id]=[RequêteIntermediaire].[NewId];

et enfin appliquer ce que je proposais ici :


http://www.developpez.net/forums/d10...e/#post5805106

Et je constate que cela ne va pas.

Question pour Fabien :
la recette que je propose, est-ce correct ou bien c'est un hasard qu'elle donnait un bon résultat hier ?

Eclaboussure ?
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 21h52   #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 à tous,

Code sql :
1
2
SELECT [R1].ID, [R1].[Valeur], [R1].[ID]+1 AS NewID, [R2].Nom
FROM [R2] RIGHT JOIN [R1] ON [R2].ID = [R1].ID+1;
Intéressante, cette possibilité de jointure entre un champ et un autre champ calculé (bien que l'assistant ne l'interprète pas).
Je n'aurais pas parié un kopec sur cette possibilité, avant l'intervention de 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 01/03/2011, 11h32   #5
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 damsmut, Claude et Richard

@Claude :
Il n’y a pas de raison que cela ne marche pas :
Code sql :
1
2
3
SELECT SousRequete.ID, SousRequete.Valeur, SousRequete.NewID, R2.Nom
FROM R2 RIGHT JOIN (SELECT ID, Valeur, ID+1 AS NewID FROM R1 ) SousRequete
ON R2.ID=SousRequete.NewID
Remets ton tablier, tu y retourne !

@Richard :

Leur utilisation est sans doute moins fréquente mais il me semble qu’Access supporte même les non équi-jointures (en dehors de l’assistant QBE bien sûr)
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2011, 12h12   #6
Membre régulier
 
Inscription : juin 2006
Messages : 549
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 549
Points : 98
Points : 98
Citation:
Envoyé par f-leb Voir le message
L'affichage des colonnes du SELECT étant traité en dernier, l'alias NewID n'est pas encore connu au moment où le moteur effectue les jointures, la requête devrait logiquement être:
Code sql :
1
2
3
SELECT [R1].ID, [R1].[Valeur], [R1].[ID]+1 AS NewID, [R2].Nom
FROM [R2] RIGHT JOIN [R1] ON [R2].ID = [R1].ID+1;

par contre la jointure n'est pas interprétable par l'assistant graphique...

du coup dans cette version on réalise 2 fois le calcul "[R1].ID+1" !!

Cela va donc baisser les performances par rapport à une version où l'on ferait cela en 2 requêtes, mais qu'avec 1 seul fois ce calcul... Non ?

PS : bien sûr ici il ne s'agit que d'un exemple... et dans ma vrai requête le calcul est plus complexe...
damsmut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2011, 14h28   #7
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
Citation:
Envoyé par damsmut Voir le message
...du coup dans cette version on réalise 2 fois le calcul "[R1].ID+1" !!
En apparence oui, dans la moulinette interne du moteur SQL j’ose espérer que c’est géré mieux que ça mais je n’en suis pas sûr.

N’ayant pas de meilleure réponse, le mieux est sans doute de tester les différentes solutions sur un volume de données significatif (il y a des codes dans la FAQ pour mesurer les performances des requêtes).

Tiens-nous au courant…
f-leb 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 14h23.


 
 
 
 
Partenaires

Hébergement Web