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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Jointure et requette sql

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Jointure et requette sql

n°2201965
skoizer
tripoux et tête de veau
Posté le 06-09-2013 à 08:25:14  profilanswer
 

Bonjour,
J'ai un soucis avec l'utilisation de SQL. je ne suis pas un grand professionnel.
j'ai 2 tables sur ma base de donnée ou je voudrais récupérer des données.
J'ai utilisé Microsoft query.
Je récupère une liste, il y a une jointure entre ces deux tables
une table équipement (contient des ordinateurs) et une table nommé table9 (imprimantes) . J'ai un souci, car si il n'y a pas de liaison entre ces deux tables. Par exemple si mon pc n'a pas d'imprimante, je ne l'aurait pas en resultat de ma requette. Mais je voudrais toute la liste !
 
SELECT EQUIPMENT.EREQ_CODE as CODE, EQUIPMENT.EREQ_REMARKS as commentaire, EQUIPMENT.EREQ_STRING6 as NOM, TABLE9.FRT9_CODE  FROM MABDD.EQUIPMENT EQUIPMENT, MABDD.TABLE9 TABLE9 WHERE EQUIPMENT.EREQ_DESCRIPTION_EXTRA3 = TABLE9.FRT9_DESCRIPTION ORDER BY EQUIPMENT.EREQ_STRING6
 
Comment faire ?
 
 


---------------
je veux tout, tout de suite, et gratuitement ! miladiou !
mood
Publicité
Posté le 06-09-2013 à 08:25:14  profilanswer
 

n°2201966
Riokmij
Blink and you're dead
Posté le 06-09-2013 à 08:52:28  profilanswer
 

Premièrement, réécrire la requête pour faire apparaitre la jointure explicitement (les jointures via la clause WHERE, c'est MAL :o). Cette requête devrait être exactement équivalente à la tienne :

Code :
  1. SELECT EQUIPMENT.EREQ_CODE as CODE,
  2.    EQUIPMENT.EREQ_REMARKS as commentaire,
  3.    EQUIPMENT.EREQ_STRING6 as NOM,
  4.    TABLE9.FRT9_CODE 
  5. FROM MABDD.EQUIPMENT EQUIPMENT
  6. INNER JOIN MABDD.TABLE9 TABLE9 ON EQUIPMENT.EREQ_DESCRIPTION_EXTRA3 = TABLE9.FRT9_DESCRIPTION
  7. ORDER BY EQUIPMENT.EREQ_STRING6


 
Maintenant qu'on a une jointure explicite, on peut facilement changer son type. "INNER JOIN", ça va sortir uniquement les lignes pour lesquels il y a une correspondance. Pour afficher toutes les lignes de la première table, il faut utiliser un "LEFT OUTER JOIN". Ça donne donc :
 

Code :
  1. SELECT EQUIPMENT.EREQ_CODE as CODE,
  2.    EQUIPMENT.EREQ_REMARKS as commentaire,
  3.    EQUIPMENT.EREQ_STRING6 as NOM,
  4.    TABLE9.FRT9_CODE 
  5. FROM MABDD.EQUIPMENT EQUIPMENT
  6. LEFT OUTER JOIN MABDD.TABLE9 TABLE9 ON EQUIPMENT.EREQ_DESCRIPTION_EXTRA3 = TABLE9.FRT9_DESCRIPTION
  7. ORDER BY EQUIPMENT.EREQ_STRING6


---------------
Are you two fucking? Are you serious? Right in front of my salad?!
n°2204251
gpl73
Posté le 26-09-2013 à 13:53:19  profilanswer
 

Un piege à c.n :)
dans le cas d'un left outer join table2
si dans ta clause where table2.champ1 = XXXX cela ne remontra que les enregistrements répondant à la clause et donc correspondra à un inner...
Tu as aussi l'exception join : qui remonte les champs de la table 1 qui ne sont pas dans la table2.
 
Guillaume


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

  Jointure et requette sql

 

Sujets relatifs
tri-fusion, jointure par hachage et boucles imbriquéesproblème avec l'affichage de requette sql
Problème jointure requête sql.Requete ACCESS avec Jointure entre 2 Tables
Requette Mysql sur serveur mutualisé ovhBesoin d'aide jointure
jointure complète/externe : comment l'utiliser ?[SQL] Une requette avec DISTINCT et COUNT
problème de jointure dans ma requetteproblème de jointure entre deux requette séparé
Plus de sujets relatifs à : Jointure et requette sql


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