2

我在 MySql 中有一个名为的表,order_item其中包含特定订单的详细信息,其中包含以下字段(以及其他一些我可能觉得没有必要在这里发布的字段)。

  1. order_id
  2. prod_id
  3. 订购数量
  4. 价格

我需要计算畅销产品。我正在使用以下 SQL 语句。

SELECT o.prod_id, sum(o.qty_ordered) as qty_ordered, p.prod_img 
FROM order_item o, product_image p 
WHERE o.prod_id=p.prod_id AND 
p.prod_id IN(SELECT prod_id FROM product_image limit 1) AND
order_id IN(SELECT order_id FROM order_table WHERE od_status='Completed')
GROUP BY prod_id 
HAVING SUM(qty_ordered)>=5
ORDER BY prod_id DESC

上面的查询计算最畅销的产品。唯一的问题是上面语句中提到的子查询

p.prod_id IN(SELECT prod_id FROM product_image limit 1)

不起作用。MySQL 抱怨

This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

此子查询检索product_image表中维护的产品图像,其中同一产品有多个产品图像,我只需要显示其中一个。

我的服务器版本是 5.1.48。还有其他方法可以解决这种情况吗?

4

2 回答 2

2

查看您的查询是否需要带有 IN 子句的行?您已经加入:

WHERE o.prod_id=p.prod_id

您所说的那一行似乎是多余的,因为连接已经发生了?此外,LIMIT 查询中没有 WHERE 子句。此表中是否只有 1 行?

于 2012-05-03T22:35:49.413 回答
1

你是对的,MySQL 不支持 IN 子查询中的限制。

但是,您可以做的是创建一个视图,然后选择该视图。

把它变成一个视图: SELECT prod_id FROM product_image limit 1

然后在你的 IN 子句中调用它:

p.prod_id IN(SELECT prod_id FROM YOUR_VIEW_NAME_HERE)

我不确定这是否是最好的答案,但它有效:)

于 2012-05-03T22:31:04.193 回答