2

order_item次のフィールドを持つ特定の注文の詳細を含むという名前のMySqlのテーブルがあります(およびここに投稿する必要がないと思われる他のフィールドがあります)。

  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、同じ製品の複数の製品画像があり、そのうちの 1 つだけを表示する必要があるテーブルに保持されている製品画像を取得します。

私のサーバーのバージョンは 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 に答える