Je pose un problème avec la requête qui affiche une liste de magasins avec le nombre de produits associés à celui-ci. Je joue avec des jointures gauche, etc. depuis un certain temps maintenant, mais en vain. Les tables ont les structures suivantes:
Table des magasins contenant des colonnes: Table des produits contenant des colonnes: Code>, La requête est la suivante: P> ID code>,
nom code> p>
Nom code>,
Statut code>,
Magasin code> p>
select s.name
, p.name
, count(p.id)
from Product as p
left join Shop as s on p.shop=s.id
where p.status <> '8796107276379'
group by
s.id
4 Réponses :
Vous devez ajouter ou p.status est null code> à votre clause WHERE WHERE.
select s.name, p.name, count(p.id)
from Shop s
left join Product p on p.shop = s.id
where (p.status <> '8796107276379' OR p.status IS NULL)
group by s.name, p.name
Nope n'a pas fonctionné. Pourquoi pensez-vous que cela devrait fonctionner avec P.Status est NULL?
Vous avez dit que votre requête ne renvoie pas des magasins sans aucun produit. Sans "ou P.Status est NULL", votre clause d'où obtiendra en effet tous ces cas, car la comparaison "NULL <>" 8796107276379 "" n'est jamais vraie. NULL n'est pas égal avec quoi que ce soit (même une autre null), ni n'est pas égal à rien.
Vous avez besoin de magasiner sur le côté gauche, car le côté droit est celui qui peut ne pas avoir de données, dans ce cas de produit.
Non seulement cela, vous avez besoin de la condition d'adhésion à gauche, de sorte que qu'il rejoint les produits sur la condition d'état et réduit simplement le produit (tout en conservant la boutique) même si l'état n'est pas souhaité. p>
select s.name , p.name , count(p.id) from Shop as s left join Product as p on p.shop=s.id AND p.status <> '8796107276379' group by s.id, p.name
J'ai trouvé de nombreux aproxes en ligne. C'est la meilleure solution. Merci de demander et de répondre.
select s.name , p.name , count(p.id) from Shop as s left join Product as p on s.id=p.shop where p.status <> '8796107276379' group by s.id
J'ai aussi souffert de ce gotha et je ne suis pas tout à fait sûr pourquoi, en plaçant le prédicat sur la Jojn elle-même plutôt que la requête principale réelle est la façon de le résoudre. p>
J'ai réellement documenté le tout, avant de lire ceci. J'ai utilisé un exemple simple avec deux deux petites tables, il explique que j'espère que la différence, peut-être que cela aidera p>
http://simpleritsolutions.com/sql/left/join/problèmes < / p>
Au lieu de quitter un lien, pourriez-vous aussi poster le matériel correspondant de l'article? Sinon, le lien pourrait devenir une victime de la pourriture de lien
essayez de remplacer la join droite, à la place de gauche
Non, ça ne marche pas. Je reçois l'erreur suivante: Impossible de trouver (visible) Type pour Alias S dans [P: Produit, s droit: boutique]. (C'est une languette de requête exclusive)