在MySql中使用LIMIT子句不适用于子查询

时间:2012-05-03 22:24:02

标签: mysql

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

  1. ORDER_ID
  2. PROD_ID
  3. qty_ordered
  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。还有另一种方法来解决这种情况吗?

2 个答案:

答案 0 :(得分:2)

查看您的查询是否需要使用IN子句的行? 您已经在加入:

WHERE o.prod_id=p.prod_id

看起来你说的那条线是多余的,因为连接已经发生了?此外,LIMIT查询中没有WHERE子句。这张表中只有一行吗?

答案 1 :(得分:1)

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

但是,您可以做的是制作视图,然后选择该视图。

将其设为视图:SELECT prod_id FROM product_image limit 1

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

p.prod_id IN(SELECT prod_id FROM YOUR_VIEW_NAME_HERE)

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