plusieurs jointures sur une meme table ?

plusieurs jointures sur une meme table ? - SQL/NoSQL - Programmation

Marsh Posté le 24-02-2008 à 18:49:27    

hello
 
dites moi, j'ai 2 tables structurées comme suit par exemple (les champs sont assez explicites)
 
users (user_id,username)
cars (Car_id, car_name, owner_id, alternate_owner)
 
Quelle est la méthode la plus optimisée de ces 2 requetes?

Code :
  1. SELECT car_id, car_name, username
  2. FROM cars, users
  3. WHERE owner_id = user_id


Ou par  

Code :
  1. SELECT car_id, car_name, username
  2. FROM cars
  3. LEFT JOIN USERS on users.user_id = cars.owner_id


 
J'aimerais également avoir le nom du conducteur secondaire sans avoir à faire 2 requetes du style

Code :
  1. SELECT car_id, car_name, username, alternate_owner
  2. FROM cars, users
  3. WHERE owner_id = user_id


 
puis faire une boucle qui récupére le conducteur secondaire avant de refaire un
 

Code :
  1. tant que...
  2. SELECT username, user_id FROM users
  3. WHERE user_id = (...)
  4. fin tant que


 
il y a t'il une méthode qui ressemblerait à la suivante: ?

Code :
  1. SELECT U1.username as ownerName, U1.user_id ,U2.username as alternate_ownerName, U2.user_id
  2. FROM users as U1, users as U2, cars as C1, cars as C2
  3. WHERE U1.user_id = C1.owner_id
  4. AND U2.user_id = C2.alternate_owner


 
la requete n'arrive pas à aboutir chez moi, on dirait que ça boucle à l'infini...  :??:


---------------
Marre des reflex - je passe au M !
Reply

Marsh Posté le 24-02-2008 à 18:49:27   

Reply

Marsh Posté le 24-02-2008 à 18:54:41    

utilise plutot de jolie jointure, tu verrai que certaines de tes tables ne sont pas liée correctement et que tu recupere une montagne d'enregistrement
 
SELECT *
FROM cars as C1  
LEFT JOIN users as conducteurPrincipal ON C1.ownerID = conducteurPrincipal .user_id  
LEFT JOIN users as conducteurSecondaire ON C1.ownerID = conducteurSecondaire.user_id
 
 
là tu as toutes les voitures avec leurs conducteurs principaux et secondaire


---------------

Reply

Marsh Posté le 25-02-2008 à 09:44:22    

flo850 a écrit :

SELECT *
FROM cars as C1  
LEFT JOIN users as conducteurPrincipal ON C1.ownerID = conducteurPrincipal .user_id  
LEFT JOIN users as conducteurSecondaire ON C1.ownerID C1.alternate_owner = conducteurSecondaire.user_id


fixed :o


---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 25-02-2008 à 11:20:44    

le copier collé c'est vraiment le mal :D


---------------

Reply

Sujets relatifs:

Leave a Replay

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