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

  FORUM HardWare.fr
  Programmation
  Algo

  Aidez moi à finaliser ma requête SQL !!!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Aidez moi à finaliser ma requête SQL !!!

n°221344
muad-ib
Posté le 27-09-2002 à 14:31:34  profilanswer
 

Salut
 
J'ai un petit problème pour la construction d'une requête MySQL :
 
Soit deux tables : 'departement' et 'voiture' par exemple.
departement :
 dep_id
 dep_num
 dep_is_dom
 
voiture :
 voiture_id
 voiture_dep_id
 voiture_desc
 
Comment faire pour construire une requête qui permette de connaître le nombre de voiture par département.
Actuellement, j'ai quelque-chose qui marche à peu près mais elle me retourne uniquement les departements ayant au moins une voiture.
 
Ce que je souhaite, c'est avoir tous les départements qui ne sont pas d'outre-mer et chacun avec son nombre de voiture, même si c'est 0.
 
Voici ma requête actuelle :
SELECT dep_num, COUNT(*) AS nb_voiture FROM departement, voiture WHERE dep_is_dom = FALSE AND voiture_dep_id = dep_id GROUP BY dep_id
 
Merci de votre aide[s]

mood
Publicité
Posté le 27-09-2002 à 14:31:34  profilanswer
 

n°221385
mrbebert
Posté le 27-09-2002 à 14:57:15  profilanswer
 

Essaie ca :
SELECT dep_num, COUNT(voiture_id) FROM departement LEFT JOIN voiture ON voiture_dep_id = dep_id WHERE dep_is_dom = FALSE GROUP BY dep_id

n°221388
muad-ib
Posté le 27-09-2002 à 15:04:03  profilanswer
 

:love:  :love:  :love:  
C'est génial, ça marche.
 
Histoire de ne pas mourrir con, c'est quoi ça le "LEFT JOIN voiture ON voiture_dep_id = dep_id", je n'ai jamais vu !
 :love:  :love:  :love:

n°221431
mrbebert
Posté le 27-09-2002 à 16:05:25  profilanswer
 

Il fait la jointure avec une 2ème table (avec le ON ...). Si il y a plusieurs lignes de la 2ème table qui correspondent, ca revient à une jointure normale.
Mais s'il n'y en a pas, tu aura quand même la ligne de la 1ère table. Ca permet de récupérer tous les éléments de la 1ère table, et pas seulement ceux qui ont un correspondant dans la 2ème.

n°1295671
m3z
il faut toujours faire simple
Posté le 31-01-2006 à 16:37:33  profilanswer
 

Ta requete ecrite en syntaxe ANSI SQL92 donne  
 
SELECT dep_num, COUNT(*) AS nb_voiture FROM departement
JOIN voiture on (voiture_dep_id = dep_id )
WHERE dep_is_dom = FALSE AND GROUP BY dep_id
 
Il s'agit d'une jointure droite :
Tu as a gauche la table departement (celle sur laquelle tu requete) et a droite la table voiture (lié par la relation : ici dep_id vers voiture_dep_id).
Avec une jointure droite l'enregistrement de gauche ne sort que si il existe un enregistrement correspondant à droite. Dans ton cas tu n'as l'enregistrement departement que si il existe une voiture dans ce departement.
 
Tu peux ecrire une la même requete avec une jointure gauche :
 
SELECT dep_num, COUNT(*) AS nb_voiture FROM departement
LEFT JOIN voiture on (voiture_dep_id = dep_id)
WHERE dep_is_dom = FALSE AND GROUP BY dep_id
 
Dans ce cas l'enregistrement de gauche sort même s'il n'existe pas d'enregistrement à droite.
L'interet de cette syntaxe c'est que tu sépare bien ce qui est de l'ordre du filtrage (WHERE dep_is_dom = FALSE) de ce qui correspond a la condition de la jointure (voiture_dep_id = dep_id).
 
A+


Message édité par m3z le 31-01-2006 à 16:51:24

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Algo

  Aidez moi à finaliser ma requête SQL !!!

 

Sujets relatifs
Comment créer une requete HttpServletRequest ?requete SQL... petite question toute simple... Help please
SQL Server 2000 et importation de CVS[SQL] Pb avec un format date...
ACCESS requète qui me prends la tête please HELP !!![access] Executer un code SQL
Lot DTS Sous SQL Server 7 pour les initiésSQL Server : delai d'attente expiré (ODBC)
[SQL - exercice] Comment faire ça ??? 
Plus de sujets relatifs à : Aidez moi à finaliser ma requête SQL !!!


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