0
votes

Sélectionnez des produits qui ne sont pas commandés ou n'ont pas la commande avec le statut de réussite

Compte tenu d'un produit et d'une table de commande. J'aimerais obtenir des produits qui ne sont jamais commandés ou commandés, mais le statut de commande n'était pas de succès jamais.

Pour obtenir des produits Jamais commandé, j'utilise cette requête: P>

SELECT *
FROM products p
LEFT JOIN orders o ON p.product_id=o.product_id
WHERE (order_id IS NULL OR (order_id>0 AND (order_status=5 OR order_status=9))
GROUP BY p.product_id;


1 commentaires

Quelles sont les valeurs possibles pour ordre_status ? Ne pouvions-tu pas dire "des produits qui n'ont pas de commande_status = 4"?


3 Réponses :


0
votes

Vous devez déplacer la condition des colonnes liées à des tables jointes EFT dans la clause xxx

L'utilisation de la colonne liée à la table jointe à gauche fonctionne comme une jointure intérieure (et ne pas Produire résultat pour ces lignes)

et vous ne devez pas utiliser de groupe par sans fonction d'agrégation, cela produisent un résultat imprévisible pour la version MySQL <5.7 et n'est pas autorisé par défaut pour la version MySQL> = 5.7 < p> Utilisez une fonction d'agrégation distincte ou ajoutée pour la colonne non invove dans le groupe par clause xxx


0 commentaires

0
votes

Que diriez-vous d'utiliser une sous-requête.

SELECT *
FROM products p
WHERE p.product_id NOT IN (
     --This query returns all successfull orders
     select product_id from orders where order_id > 0 and order_status = 4
    )


0 commentaires

0
votes

Utilisez la logique de votre première requête et ajoutez une condition supplémentaire dans la clause ON: xxx

Notez que vous n'avez pas besoin de groupe par ici, puisque Vous obtiendrez une ligne par produit de toute façon (en supposant que les ordres.ordr_id sont une clé primaire).

Cette requête est équivalente à xxx

et ceci peut être lu comme "Sélectionner tous les produits qui n'ont pas de commandes avec Status = 4 (Succès)".

Si votre logique est plutôt "Sélectionnez tous les produits qui n'ont pas de commandes ou n'ont que des commandes avec statut 5 ou 9 "- alors vous pouvez utiliser xxx


0 commentaires