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;