2012-04-13 8 views
0

サブクエリを使用して、カテゴリとそれに属するすべてのサブカテゴリの両方から商品を返します。私はそれを実行すると、それは(ca.categoryid=47 OR ca.categoryid IN (SELECT categoryid FROM cart_categories WHERE catparentid=47))部分を無視して、単にp.prodvisible=1 AND p.prodfeatured=1一部に基づいて結果を返すWHERE句は、サブクエリを考慮せずに結果を返しています

SELECT 
    ca.categoryid, p.*, FLOOR(prodratingtotal/prodnumratings) AS prodavgrating, 0 AS prodgroupdiscount 
FROM 
    cart_categoryassociations ca, cart_products p 
WHERE 
    p.prodvisible=1 AND p.prodfeatured=1 AND (ca.categoryid=47 OR ca.categoryid IN (SELECT categoryid FROM cart_categories WHERE catparentid=47)) 

:ここでのSQLクエリがあります。

(言い換えれば、それは彼らがサブクエリで述べたカテゴリに属していない場合でも、システム内のすべての機能を備えた製品を持ち帰る)

PS:私は別に括弧内の部分を実行しようとしていると正しいカテゴリを返します。

MySQLバージョン5.0.8。

+0

エイリアス 'pi'を持っているテーブル? –

+0

これは、ここで質問するためにクエリを簡略化するために削除した左結合からのものです。今すぐ削除しました。 (簡略化されたクエリはメインクエリと同じ結果を返す) –

答えて

1
WHERE 
    p.prodvisible=1 AND p.prodfeatured=1 AND (ca.categoryid=47 OR ca.categoryid IN (SELECT categoryid FROM cart_categories WHERE catparentid=47)) 

私は、これは(ca.categoryid=47 OR ca.categoryid IN (SELECT categoryid FROM cart_categories WHERE catparentid=47))サブ句で一致した行ごとに、p.prodvisible=1 AND p.prodfeatured=1にマッチしたcart_products内のすべての行を返していると思います。

doen't cart_productscart_categoriesには何らかの外部キーがありますか? あなたが追加される場合があります:

AND p.categoryid=ca.categoryid

+0

ありがとう、私はそれが非常にシンプルなものでなければならないことが分かっていた。 –

1
FROM 
cart_categoryassociations ca, cart_products p 

データベースの構造はわかりませんが、完全結合ではなく、左結合で行うべきではありません。それは意図的なのでしょうか?

関連する問題