Ressortir les lignes NULL d'une requete

Résolu/Fermé
Lap-top Messages postés 56 Date d'inscription vendredi 9 décembre 2011 Statut Membre Dernière intervention 5 octobre 2016 - 27 oct. 2014 à 15:08
Lap-top Messages postés 56 Date d'inscription vendredi 9 décembre 2011 Statut Membre Dernière intervention 5 octobre 2016 - 31 oct. 2014 à 11:51
Bonjour à tous. Je dispose de trois tables : produit(id_produit, nom_produit, prix), employe(id_employe, nom_employe) et vente( id_vente, id_produit, id_employe ).

J'aimerais poser une requete dans laquelle ressortir deux catégories de choses :

le total de vente par produit(sur chaque tuple) effectuées par l'employe "Nick" (sur chaque ligne je sors : id_produit, nom_produit, nom_employe, totalDesPrix)
les lignes de produits non vendus avec dedans la valeur NULL comme d'habitude, genre le id_produit, nom_produit et nom_employe sortent mais le total de prix reste à NULL.
J'ai essayé cette requête : "

select produit.id_produit, nom_produit, nom_employe, sum(prix) from produit left join vente on produit.id_produit = vente.id_produit where vente.id_employe = employe.id_employe and nom_employe like "Nick"
GROUP BY produit.id_produit order by produit.id_produit 
Mais ça me renvoie que les les lignes des produits vendus et non celles des non vendus.



Je voudrais utiliser cette requête pour poser par la suite un "if(chamm == NULL)" et mettre les cases Nulles a zéro. Alors merci d'avance pour vos réponses.
A voir également:

3 réponses

Utilisateur anonyme
27 oct. 2014 à 23:01
Bonjour

Pour les produits non vendus, tous les champs de ta clause WHERE valent NULL. Ta clause WHERE est donc évaluée à FALSE, et la ligne correspondante n'est pas incluse dans les résultats.

Pourquoi n'écris-tu pas simplement
... on produit.id_produit = vente.id_produit AND vente.id_employe = employe.id_employe and nom_employe like "Nick" ...
? Il n'y a plus de WHERE pour supprimer les lignes que le LEFT JOIN avait, lui, conservées.
La clause ON d'une jointure n'est pas limitée à l'égalité de deux champs, tu peux très bien mettre une condition "complexe".
Je n'ai pas essayé, mais ça devrait marcher pour récupérer aussi les lignes des produits non vendus.
1
flokocha Messages postés 1510 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 10 octobre 2015 281
Modifié par flokocha le 28/10/2014 à 11:08
Salut,

Dans la requête que tu indiques, il n'y a aucune référence à la table "employe". Mais je suppose qu'il s'agit d'un oubli à l'écriture dans ton post, sinon tu aurais tout simplement une erreur mysql.

Pour ce qui est de ton problème, la solution proposée par le père devrait fonctionner. Sinon, tu peux aussi remplacer
and nom_employe like "Nick"
par
and (nom_employe like "Nick" or nom_employe is null)
.
0
Lap-top Messages postés 56 Date d'inscription vendredi 9 décembre 2011 Statut Membre Dernière intervention 5 octobre 2016 9
31 oct. 2014 à 11:51
Okkk!! merci le père passe mais il a fallu que je pose un Where la où tu as mis AND. Apparemment, SQL refuse la présence d'un AND avant la clause WHER. Je sais pas trop.
J'ai donc fait après la clause on
...WHERE employe.id_employe = vente.id_employe and nom_employe like "Nick" 
.
Ça passe, merci.
Sinon, tu as raison flokocha, j'ai oublié de référencer la table employe.
Avant de revenir lire les réponses que vous avez postées, j'ai tenté et tenté et trouvé une méthode. Mais c'est plus complexe alors c'est plus la peine de la poster donc je vais utiliser la vôtre.
0