2012-04-13 152 views
0

我正在使用子查詢來返回類別及其下的所有子類別的產品。下面是它的SQL查詢: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)) 

當我運行它,它會返回僅基於p.prodvisible=1 AND p.prodfeatured=1部分結果,忽略了(ca.categoryid=47 OR ca.categoryid IN (SELECT categoryid FROM cart_categories WHERE catparentid=47))部分。

(換句話說,它帶回所有特色產品體系中,即使它們不屬於子查詢中提到的類別)

PS:我已經試過單獨運行括號中的一部分,它返回正確的類別。

MySQL版本5.0.8。

+0

哪個表有別名'pi'? – 2012-04-13 10:23:40

+0

這是我爲了簡化查詢而在此處刪除的左連接。現在刪除它。 (簡化查詢返回的結果與主查詢相同) – 2012-04-13 10:27:10

回答

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)) 

我認爲這是恢復中的所有行通過p.prodvisible=1 AND p.prodfeatured=1匹配cart_products,由(ca.categoryid=47 OR ca.categoryid IN (SELECT categoryid FROM cart_categories WHERE catparentid=47))子條款相匹配的每一行。

doen't cart_products有某種外鍵cart_categories? 那麼您可以添加:

AND p.categoryid=ca.categoryid

+0

謝謝,我知道它一定是非常簡單的東西,我一直想念。 – 2012-04-13 11:21:52

1
FROM 
cart_categoryassociations ca, cart_products p 

我不知道你的數據庫結構,但不應該用左連接而不是完全連接來完成。那是故意的嗎?