Jointure et requette sql

Jointure et requette sql - SQL/NoSQL - Programmation

Marsh Posté le 06-09-2013 à 08:25:14    

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 !
Reply

Marsh Posté le 06-09-2013 à 08:25:14   

Reply

Marsh Posté le 06-09-2013 à 08:52:28    

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?!
Reply

Marsh Posté le 26-09-2013 à 13:53:19    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed