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: Je veux voir une liste de clients qui ont fait une commande, mais n'ont pas commandé l'ID de produit 70. P> 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? P> Merci! P> P>
3 Réponses :
On dirait que vous recherchez simplement le mot-clé pas code>:
non ordclydetails.productid = 70 code> est exactement la même chose que orderddetails.productid <> 70 code>
Cela donne le même résultat, ce qui n'est pas ce que je cherche.
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;
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);
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.