Maison > Questions et réponses > le corps du texte
P粉9519143812023-08-30 00:58:10
Je peux voir la direction que vous essayez d'aller avec votre requête, mais malheureusement, cela ne vous donnera pas les 10 meilleurs résultats. Au lieu de cela, vous risquez d'obtenir aucun résultat :
SELECT products.* FROM products WHERE products.id=[SELECT DISTINCT (products.id) ^^^ FROM orders WHERE customer.id=id->list(10)]
=
signifie que vous recherchez une correspondance exacte et que votre sous-requête doit renvoyer 10 lignes de données, si vous utilisez cette opération, vous obtiendrez cette erreur.
Mais si vous le remplacez par IN
, vous risquez d'obtenir cette erreur
En fonction de vos tentatives actuelles, votre choix est d'en faire une JOIN
. Par contre, je me demandais comment tu avais fait ton top 10 ? Je vois que vous recherchez un produit dans le top 10, mais sur quelle base ? Montant des ventes? Quantité commandée ?
En ce sens, voici un exemple du top 10 des produits triés par quantité commandée.
SELECT P.* FROM Products P JOIN ( SELECT product_id FROM Orders GROUP BY product_id ORDER BY SUM(Qty) DESC LIMIT 10) O ON P.id=O.product_id;
La sous-requête n'est pas nécessaire, mais j'imite la sous-requête que vous avez essayée, même si le processus n'est pas exactement le même. Voici la version sans la sous-requête :
SELECT P.* FROM Orders O JOIN Products P ON O.product_id=P.id GROUP BY product_id ORDER BY SUM(Qty) DESC LIMIT 10;
Ou peut-être recherchez-vous le top 10 trié par montant des ventes ?
SELECT P.* FROM Orders O JOIN Products P ON O.product_id=P.id GROUP BY product_id ORDER BY SUM(UnitPrice*Qty) DESC LIMIT 10;