0
votes

Requête SQL avec sous-requête en utilisant non opérateur

newbie ici en utilisant Base de données de démonstration de W3schools pour pratiquer les requêtes SQL et Je suis coincé sur un: xxx

Je veux voir une liste de clients qui ont fait une commande, mais n'ont pas commandé l'ID de produit 70.

Cette requête reste Affiche les autres ordres du client qui ont commandé le produit ID 70. Si un client l'a commandé, je ne veux voir aucune de leurs autres commandes sur cette liste. Ce scénario appelle-t-il une sous-requête en utilisant où existe-t-il?

Merci!

sql

0 commentaires

3 Réponses :


1
votes

On dirait que vous recherchez simplement le mot-clé pas : xxx


2 commentaires

non ordclydetails.productid = 70 est exactement la même chose que orderddetails.productid <> 70


Cela donne le même résultat, ce qui n'est pas ce que je cherche.



1
votes

Agrégation d'utilisation:

SELECT c.CustomerID, c.CustomerName
FROM Customers c JOIN
     Orders o
     ON c.CustomerID = o.CustomerID JOIN
     OrderDetails od
     ON od.OrderID = o.OrderID
GROUP BY c.CustomerID, c.CustomerName
HAVING SUM(CASE WHEN od.ProductID = 70 THEN 1 ELSE 0 END) = 0;


0 commentaires

1
votes

Vous pouvez en effet utiliser une interrogation non des exsistes pour cela:

SELECT c.*
FROM customers c
WHERE NOT EXISTS (select *
                  from orders o
                    join orderdetails od on o.orderid = od.orderid
                  where o.customerid = c.customerid
                    and od.productid = 70);


1 commentaires

Merci, cela fonctionne aussi, mais cela montre tous les clients, y compris ceux qui n'ont rien commandé. J'ai édité ma question pour préciser davantage que la requête est destinée aux clients qui ont fait une commande.