(Résolu par une jointure)[MYSQL] Dissocier ma requête ?

WRInaute discret
Salut,

en fait j'ai un pb de requête MYSQL :)

J'ai deux tables :
- table voitures
- table soumissions

Je chercher à afficher une tableau tout con qui contient :
- Le nombre de fois qu'un modèle appararait ds la table soumissions ( ex : 5 Clio, 3 Ferrari )
- Le modèle ( Clio, Ferrari etc )
- 0 si la voiture n'est pas déja ds la table voitures ou sinon le nombre de fois qu'elle est présente dans la bdd en prenant le champs nb de ce modèle dans la table voitures

J'en suis rendu à ce code :

Code:
SELECT
	s.modèle,
	COUNT(s.modèle) AS nb_new,
	CASE WHEN s.modèle = v.modèle THEN v.nb ELSE 0 END AS nb
FROM
	voitures v, soumissions s
GROUP BY
	s.modèle

Ce code marche presque parfaitement sauf que le nb_new est faux ! Ca me renvoie des nombres qui n'ont rien à voir.. Je crois que ça part en live parce que j'ai indiqué 2 tables dans le FROM et que pour une raison le COUNT s'embrouille.

Qqun sait comment je pourrais faire ? Merci :)
 
WRInaute accro
Salut,

Il faut peut-être faire une jointure entre les deux tables pour éviter le produit cartésien ?
 
WRInaute discret
Dans ton cas - et si j'ai bien compris le problème - tu est obligé d'utiliser une jointure externe (car des modèle peuvent exister dans la table soumission mais pas dans la table voiture). Dans ce cas, le code SQL est le suivant:

Code:
SELECT 
   s.modèle, 
   COUNT(s.modèle) AS nb_new, 
   CASE WHEN v.modèle IS NULL THEN 0 ELSE v.nb END AS nb
FROM 
   soumissions s
RIGHT JOIN voiture v ON v.modèle = s.modèle
GROUP BY 
   s.modèle
 
WRInaute discret
Merci magicaxe tu as bien compris le pb :)

Ta proposition s'approche du résultat souhaité mais ce n'est pas encore ça :)

Si dans ma table soumissions, j'ai :
2 fois le modèle Clio qui n'existe pas dans voitures ;
1 fois le modèle Twingo qui existe déja 6 fois dans voitures ;

j'obtiens ceci :

Code:
modèle 	       nb_new 	  nb
NULL 	         0 	         1
Twingo	        1 	        6

Donc bon pour la ligne Twingo mais faux pour les 2 soumissions de Clio !
J'ai changé ainsi :

Code:
SELECT
   s.modèle,
   COUNT(s.modèle) AS nb_new,
   CASE WHEN [b]s[/b].modèle IS NULL THEN 0 ELSE v.nb END AS nb
FROM
   soumissions s
RIGHT JOIN voiture v ON v.modèle = s.modèle
GROUP BY
   s.modèle

et c'est un peu mieux :

Code:
modèle 	nb_new 	nb
NULL 	  0 	    0
Twingo	 1 	   6

mais c'est pas tout à fait ça :S
 
WRInaute discret
J'ai remplacé RIGHT par LEFT et ça marche :) Je comprends pas trop les JOIN mais bon ça marche ! Merci bien :)

Code:
SELECT
   s.modèle,
   COUNT(s.modèle) AS nb_new,
   CASE WHEN v.modèle IS NULL THEN 0 ELSE v.nb END AS nb
FROM
   soumissions s
LEFT JOIN voiture v ON v.modèle = s.modèle
GROUP BY
   s.modèle
 
WRInaute discret
Oui, excuses-moi, j'en arrive à confondre ma droite et ma gauche ... c'est grave quand même :lol:

Content que ça marche :wink:
 
Discussions similaires
Haut