2012-05-03 111 views
2

我在MySql中有一個名爲order_item的表,其中包含特定訂單的詳細信息,其中包含以下字段(以及其他我可能認爲不必在此處發佈的信息)。在MySql中使用LIMIT子句不適用於子查詢

  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。是否有另一種方法來解決這種情況?

回答

1

你是對的,MySQL不支持在IN子查詢中的限制。

但是,您可以做的是製作一個視圖,然後選擇該視圖。

將此變成一個觀點:選擇PROD_ID FROM product_image限1

然後調用它的IN子句中:

p.prod_id IN(SELECT prod_id FROM YOUR_VIEW_NAME_HERE) 

我不知道這是否是最好的答案,但它作品:)

2

看着你的查詢是甚至需要IN子句的行? 您已經做了聯同:

WHERE o.prod_id=p.prod_id 

好像你是在談論該行是多餘的,因爲聯接已經發生了?此外,LIMIT查詢中沒有WHERE子句。這張桌子裏只有一排嗎?