P粉9519143812023-08-30 00:58:10
我可以看出你嘗試的查詢方向,但不幸的是這不會給你前10個結果。相反,你可能根本不會得到任何結果:
SELECT products.* FROM products WHERE products.id=[SELECT DISTINCT (products.id) ^^^ FROM orders WHERE customer.id=id->list(10)]
=
表示你正在尋找一個精確匹配,你的子查詢應該返回10個行的數據,如果你使用這個操作,你將收到這個錯誤。
但如果你將其改為IN
,你可能會收到這個錯誤
根據你目前的嘗試,你的選擇是進行一個JOIN
。然而,我想知道你是如何得到你的前10個的?我可以看到你正在尋找產品的前10個,但基於什麼?銷售金額?訂購數量?
在這個意義上,這是一個按訂購數量排序的前10個產品的範例。
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;
子查詢是不必要的,但我在模仿你嘗試的子查詢,雖然過程並不完全相同。這是沒有子查詢的版本:
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;
或者你可能正在尋找按銷售金額排序的前10個?
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;#