Problème avec une requête

Problème avec une requête - SQL/NoSQL - Programmation

Marsh Posté le 04-02-2006 à 12:43:23    

Bonjour,
 
Il me semblait que les INNER JOIN ne faisait les liens entre 2 tables que si le lien existait réellement de chaque côté.
(Exemple Commande => Produit, uniquement les produits qui apparaissent dans une commande)
 
Bref, voici ma requête :
 

Code :
  1. $req   = "SELECT U.unite_id, U.unite_name, E.effectif, U.unite_lv, U.unite_att, U.unite_def, U.build_time, U.unite_pic, U.unite_coast
  2.       FROM unite U INNER JOIN effectif E
  3.       ON U.unite_id     = E.unite_id
  4.       AND E.user_id        = ".$_SESSION["id"]."
  5.       AND E.effectif_actif = '1'
  6.       ORDER BY U.unite_lv DESC";


 
Le problème est que lorsque j'effectue cette requête pour un joueur qui n'a qu'une seule unité, il y a 9 réponses.
(en fait je met le résultat de la requête dans un tableau et je fais des echo du tableau).
La première valeure (id=0) est exacte et les 8 autres sont vides, donc je pense bien que c'est un problème de jointure...
 
Pour info, j'ai aussi essayé :
FROM unite U INNER JOIN effectif E,
FROM effectif E INNER JOIN unite U,
FROM unite U RIGHT JOIN effectif E,
FROM effectif E RIGHT JOIN unite U,
FROM unite U LEFT JOIN effectif E,
FROM effectif E LEFT JOIN unite U.
 
Merci.
 

Reply

Marsh Posté le 04-02-2006 à 12:43:23   

Reply

Marsh Posté le 04-02-2006 à 16:20:19    

Malta a écrit :

Bonjour,
 
Il me semblait que les INNER JOIN ...
Merci.


 
Salut
 
Il te semble juste.  
 
Je me demande toujours pourquoi MS a inventer cette daube inner... Le (+) sous oracle est tellement plus visuel et allège aussi l'écriture. Mais bon faut s'en accommoder.
 
Je ne pense pas à un problème de jointure... sans le inner join ta requête devient :
SELECT U.unite_id, U.unite_name, E.effectif
, U.unite_lv, U.unite_att, U.unite_def
, U.build_time, U.unite_pic, U.unite_coast                
FROM unite U, effectif E  
Where U.unite_id  = E.unite_id                
AND E.user_id  = ".$_SESSION["id"]."                
AND E.effectif_actif = '1'                
ORDER BY U.unite_lv DESC
 
... mais cela ne devrait rien changer. Je vérifierai la compositon des données.  
 
Sinon dans certain cas l'utilisation du distinct sert à éviter ce genre de problème  
 
@+

Reply

Marsh Posté le 05-02-2006 à 13:25:47    

Le (+) de Oracle c'est une jointure externe

Reply

Marsh Posté le 05-02-2006 à 17:17:08    

oui... je dis pas le contraire.
je dis que que la syntaxe = pour les inner et (+) ou moins pour les right ou les lefts me gavent et que c'est pas lisible... Maintenant on est bien obliger de faire avec :-)

Reply

Sujets relatifs:

Leave a Replay

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