Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
725 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Jointure externe

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Jointure externe

n°1353596
hacksi
Posté le 25-04-2006 à 14:13:36  profilanswer
 

Bonjour,
Voila je travail sous access et j'essaye de faire la requête suivante :

Code :
  1. SELECT enr.Jour, enr.Heure, eq.Abrev, et.Etat_technique, p.Libelle
  2. FROM ENREGISTREMENT enr, EQUIPEMENT eq, ETAT et, PANNE p
  3. WHERE eq.Id_equip=enr.Id_equip AND enr.Id_enr=et.Id_enr(+) AND enr.Id_enr=p.Id_enr(+);


 
Mais d'après ce que j'ai cru comprendre en faisant quelques recherches sur le net le '(+)' fonctionne que sous oracle.
Donc comment je fais avec les join... car je ni comprend rien :d ?


Message édité par hacksi le 25-04-2006 à 14:14:07
mood
Publicité
Posté le 25-04-2006 à 14:13:36  profilanswer
 

n°1353621
Beegee
Posté le 25-04-2006 à 14:55:34  profilanswer
 

Code :
  1. SELECT enr.Jour, enr.Heure, eq.Abrev, et.Etat_technique, p.Libelle
  2. FROM ENREGISTREMENT enr
  3. INNER JOIN EQUIPEMENT eq ON eq.Id_equip=enr.Id_equip
  4. LEFT JOIN ETAT et ON et.Id_enr=enr.Id_enr
  5. LEFT JOIN PANNE p ON p.Id_enr=enr.Id_enr;

n°1353631
hacksi
Posté le 25-04-2006 à 15:02:35  profilanswer
 

Merci pour ton aide mais ça ne marche pas.
Message d'erreur :  

Code :
  1. Erreur de syntaxe, (opérateur absent) dans l'expression 'eq.Id_equip=enr.Id_equip
  2. LEFT JOIN ETAT et ON et.Id_enr=enr.Id_enr
  3. LEFT JOIN PANNE p ON p.Id_enr=enr.Id_enr'

n°1357740
hacksi
Posté le 02-05-2006 à 13:27:20  profilanswer
 

Help please :)

n°1357765
darkfrost
Posté le 02-05-2006 à 13:48:34  profilanswer
 

Code :
  1. SELECT enr.Jour, enr.Heure, eq.Abrev, et.Etat_technique, p.Libelle
  2. FROM ((ENREGISTREMENT enr
  3. INNER JOIN EQUIPEMENT eq ON eq.Id_equip=enr.Id_equip)
  4. LEFT JOIN ETAT et ON et.Id_enr=enr.Id_enr)
  5. LEFT JOIN PANNE p ON p.Id_enr=enr.Id_enr;

n°1357777
hacksi
Posté le 02-05-2006 à 13:57:09  profilanswer
 

ça à l'air de marcher merci :d
Mais peux-tu m'expliquer la logique des parenthèses stp

n°1357882
darkfrost
Posté le 02-05-2006 à 15:46:04  profilanswer
 

Les tables sont jointes entre elles deux à deux.  
 
Ne pas mettre de parenthese ci-dessus équivaut à faire sous Oracle un WHERE t1.id = t2.id = t3.id = t4.id ce qui est contraire à la logique du SQL.
 
Si tu met des parentheses, sous Access tu as les étapes suivantes :
 
Etape 1
t1 INNER JOIN t2 ON t1.id = t2.id
Te voila avec une nouvelle table fictive qui est le résultat de la jointure entre t1 et t2.
 
Etape 2
(t1.id INNER JOIN t2.id ON t1.id = t2.id) LEFT JOIN t3 ON t1.id = t3.id
Tu fais une jointure entre la nouvelle table obtenu à l'étape 1 et la table t3. Tu obtiens une nouvelle table fictive qui est le fruit de tes deux jointures successives.
 
Etape 3
((t1.id INNER JOIN t2.id ON t1.id = t2.id) LEFT JOIN t3 ON t1.id = t3.id) LEFT JOIN t4 ON t1.id = t4.id
Même explication qu'a l'étape 2.
 
En résumant tu es contraint sous Access de déterminer l'ordre dans lequel il executera tes produits de jointures par des parentheses :) !
 
En espérant que ce soit assez clair, car quand je me relis, j'en ai pas l'air :D !
 
 

n°1358703
hacksi
Posté le 03-05-2006 à 15:23:53  profilanswer
 

Ok merci pour ces renseignement.
 
Sinon j'ai une autre petite question : comment je transforme la requête suivante pour utiliser des jointures ?  

Code :
  1. select enr.Id_enr from ENREGISTREMENT enr where enr.Id_enr in (select Id_enr from PANNE) OR enr.Id_enr in (select Id_enr from VALEUR)


Message édité par hacksi le 03-05-2006 à 15:28:42
n°1359034
hacksi
Posté le 03-05-2006 à 21:07:55  profilanswer
 

Personne ?


Message édité par hacksi le 03-05-2006 à 21:10:14
n°1359205
darkfrost
Posté le 04-05-2006 à 09:16:54  profilanswer
 

Tu peux faire un INNER JOIN entre Enregistrement et un UNION de tes deux requetes entre parentheses...par contre je comprend pas la logique de la manoeuvre, la requete que tu met juste au dessus ressort bien les résultats que tu veux ?

mood
Publicité
Posté le 04-05-2006 à 09:16:54  profilanswer
 

n°1360162
hacksi
Posté le 05-05-2006 à 09:08:06  profilanswer
 

Voila ça sera peut-être plus simple à comprendre.
http://p2a06.free.fr/Image3.jpg
Donc en fait oui la requête me renvoit bien ce que je veux car en fait je cherche tous les enregistrements qui sont à la fois dans la table PANNE et dans la table VALEUR.
 
 
Pour exploiter cette BD, j'ai créé un formulaire avec différent choix possibles. Donc selon les choix, mes jointures vont être différentes. Donc je pensais faire un système pour construire ma requête du style :

Code :
  1. strSql = "SELECT " & Champs & " FROM " & Tables & " WHERE enr.Id_equip in (" & strChamps & " )" & Filtre & "


 
Ce qui me permet de renseigner la variables Tables de la manière suivante par exemple :

Code :
  1. Tables = Tables & " Left Join STATION st On st.Id_station=eq.Id_station) INNER JOIN ENREGISTREMENT enr ON eq.Id_equip = enr.Id_equip"


 
Mais le problème c'est que apparament celà n'est pas possible puisqu'il faut définir un ordre de priorité pour les jointures avec les join. Par conséquent, je ne pourrais pas utiliser la méthode avec union.
 
Donc je ne sais pas si c'est une bonne idée mais je n'en vois pas d'autre, je pensais faire :

Code :
  1. Select Case Choix
  2.    Case "1" 'Table ETAT, VALEUR, ENREGISTREMENT, EQUIPEMENT, STATION
  3.        Tables = "ETAT AS et INNER JOIN ((EQUIPEMENT AS eq LEFT JOIN STATION AS st ON eq.Id_station = st.Id_station) INNER JOIN (ENREGISTREMENT AS enr INNER JOIN VALEUR AS v ON enr.Id_enr = v.Id_enr) ON eq.Id_equip = enr.Id_equip) ON [et].Id_etat = v.Id_etat"
  4.    Case "2" 'On choisit la table ETAT et la table PARAM
  5.        Tables = "PARAM RIGHT JOIN ((ETAT RIGHT JOIN ((EQUIPEMENT INNER JOIN ENREGISTREMENT ON EQUIPEMENT.Id_equip = ENREGISTREMENT.Id_equip) INNER JOIN VALEUR ON ENREGISTREMENT.Id_enr = VALEUR.Id_enr) ON ETAT.Id_etat = VALEUR.Id_etat) INNER JOIN STATION ON EQUIPEMENT.Id_station = STATION.Id_station) ON PARAM.Id_param = VALEUR.Id_param"
  6.    Case "3" 'On choisit que la table PARAM
  7.        Tables = "PARAM INNER JOIN (((EQUIPEMENT INNER JOIN ENREGISTREMENT ON EQUIPEMENT.Id_equip = ENREGISTREMENT.Id_equip) INNER JOIN VALEUR ON ENREGISTREMENT.Id_enr = VALEUR.Id_enr) INNER JOIN STATION ON EQUIPEMENT.Id_station = STATION.Id_station) ON PARAM.Id_param = VALEUR.Id_param"
  8.    Case "4" 'On choisit que la table PANNE
  9.        Tables = "((EQUIPEMENT INNER JOIN ENREGISTREMENT ON EQUIPEMENT.Id_equip = ENREGISTREMENT.Id_equip) INNER JOIN STATION ON EQUIPEMENT.Id_station = STATION.Id_station) INNER JOIN PANNE ON ENREGISTREMENT.Id_enr = PANNE.Id_enr"
  10.    Case "5" 'On choisit les table ETAT et PANNE
  11.        Tables = ""
  12.    Case "6" 'On choisit les table PARAM et PANNE
  13.        Tables = ""
  14.    Case Else
  15.        MsgBox ("Problème dans les jointures." )
  16. End Select

n°1362156
hacksi
Posté le 09-05-2006 à 10:00:20  profilanswer
 

J'essaye de faire une requête qui me permet de récupérer les Id_enr de la table enregistrement dont les Id_enr sont à la fois dans les tables ETAT et PANNE mais je ni parvient pas. Cela fonctionne quand je met la table VALEUR et PANNE mais pas quand je rajoute la table ETAT.
Voici ce que cela donne :
http://p2a06.free.fr/requete.JPG


Message édité par hacksi le 09-05-2006 à 10:01:47
n°1362171
tegu
Posté le 09-05-2006 à 10:29:05  profilanswer
 

Utilise l'interface graphique de Access; elle est faite justement pour ne pas se prendre la tête quand on ne maîtrise pas son langage SQL un peu spécifique.
Et quand ta requête est finalisée et fonctionnelle, tu affiches son code SQL et tu le copies dans ton code.

n°1362200
hacksi
Posté le 09-05-2006 à 11:04:00  profilanswer
 

lol bin la capture d'écran que j'ai affiché, c'est en utilisant l'interface graphique...

n°1362207
tegu
Posté le 09-05-2006 à 11:08:27  profilanswer
 

J'ai pas les images (filtrées) désolé.

n°1366634
hacksi
Posté le 15-05-2006 à 16:27:09  profilanswer
 

help !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Jointure externe

 

Sujets relatifs
Jointure MySQLAccès source externe depuis un script VB
MySql : jointure externeTextarea et texte externe j'y arrive tjs pas aidez moi svp
[access] travail propre ? jointure requêtelancer l'execution d'un programme externe genre word excel etc...
[postgresql] jointure externepb SQL : Jointure externe (plusieurs)
[SQL]+[Access] Jointure externe, j'ai du mal là... :(sql: toujours moi :D : jointure externe
Plus de sujets relatifs à : Jointure externe


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR