Requête Union entre 3 tables

cs_Nana35 Messages postés 18 Date d'inscription mercredi 8 octobre 2008 Statut Membre Dernière intervention 2 février 2009 - 9 oct. 2008 à 09:44
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 - 9 oct. 2008 à 13:35
Bonjour à tous,
j'ai cherché sur le forum des  réponses susceptibles de correspondre au mieux à ma situation mais je n'arrive pas à appliquer des requêtes sql pour mon cas particulier.
Dans un premier temps, je vous explique les relations entre mes tables sous Access:
Captage-->Collectivité
Captage-->SMP
Collectivité-->SMP
Collectivité-->Exploitant
SMP-->Exploitant
Je souhaite d'après ce modèle obtenir une requête :
IdCaptage, Nom captage, Id Producteur (SMP et collectivité confondus), Nom Producteur (SMP et Collectivité confondus), IdExploitant pour chaque producteur.

Si cette union entre trois tables n'est pas faisable, il y a une autre possibilité. Je cherche à obtenir sur une même colonne les identifiants producteurs (SMP et Collectivité) dans la table Captage et d'autre part à unir la table Collectivité avec la table SMP (table producteur) avec également l'exploitant qui est renseigné. Cela nécessite deux requêtes.

Quelle est la soultion que vous me proposez?
Est-t-il nécessaire de décrire davantage l'ensemble des champs?
Merci de votre aide.
A voir également:

3 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 36
9 oct. 2008 à 10:09
Salut

Peux tu mettre les types des champs et les autres champs pour éclaisir ta demande.

TABLE1
===========
ID | Collectivité

TABLE2
==========
ID | SMP

TABLE 3
==========
ID | PRODUCTEUR | TABLE_ORIGINE

Voila comment obtenir un jeu qui est du type table3
SELECT ID ,  Collectivité  as PRODUCTEUR, 'collect' as TABLE_ORIGINE FROM TABLE1
UNION
SELECT ID ,  SMP as PRODUCTEUR, 'SMP' as TABLE_ORIGINE FROM TABLE2

Je sais que c'est pas la réponse mais ca peut être une piste pour résoudre le problème.
Je ne vois pas comment sont articulées tes  tables

Pour faire la concaténation de champs  c'est champ + '   ' + champ

Bon SQL
cs_Nana35 Messages postés 18 Date d'inscription mercredi 8 octobre 2008 Statut Membre Dernière intervention 2 février 2009
9 oct. 2008 à 11:00
Merci,
Ok pour la table producteur entre la table smp et collectivité. Mais si je veux une relation captage -->producteur il faut que je regroupe dans la table captage ma colonne portant l'id SMP avec ma Colonne idColl. Mais ça aussi c'est pas clair pour moi.


Ta méthode implique alors deux requêtes. Je ne peux pas avoir du premier coup ce résultat :"IdCaptage, Nom captage, Id Producteur (SMP et collectivité confondus), Nom Producteur (SMP et Collectivité confondus), IdExploitant pour chaque producteur"

Par contre je ne cherche pas à concaténer deux champs.

Voici le détail de mes tables:
CAPTAGE: CAid, CAnom, CAstade, CAdate, CAcol#, CAsmp#
COLLECTIVITE: COid, COnom, COtype, COabonné, COsmp#, COexpl#
SMP: Sid, Snom, Sabre, Spresident, Sexpl#
EXPLOITANT: Eid, Enom.
En fait ,un captage peut être la propriété d'une collectivité ou d'un smp. Et une collectivité fait partie d'un smp. Un Smp a un contrat d'affermage avec un exploitant et une collectivité a aussi de son côté un contrat d'affermage avec un exploitant.
J'espère que c'est plus clair.
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 36
9 oct. 2008 à 13:35
Salut,

Une requete du style
SELECT captage.nom, Collect.nomC, SMP.nomSMP, iif(isnull(SMP.nomSMP),Collect.nomC,SMP.nomSMP) as exploitFROM SMP RIGHT JOIN (Collect RIGHT JOIN captage ON Collect.id captage.FK_C_ID) ON SMP.id captage.FK_S_ID;

Ca repond peut etre a ta demande le nom des colonnes a été perdu pour gagner du temps.

Bon SQL
Rejoignez-nous