2013-03-28 92 views
0

我有一個查詢,有幾個子查詢,但奇怪的是,子查詢將不會返回相同的值,如果我手動逐個執行查詢..首先我在查詢中使用了'IN',但沒有使用索引,所以我將它們轉換爲'='。結果與'IN'相同,或者當我使用轉換爲'='的變體時。嵌套GROUP_CONCAT查詢不會返回所有值

SELECT * 
FROM partners 
WHERE id = ( 

SELECT GROUP_CONCAT(partner_id 
SEPARATOR ' OR id = ') 
FROM product_feeds 
WHERE id = ( 

SELECT GROUP_CONCAT(DISTINCT feed_id 
SEPARATOR ' OR id = ') 
FROM product_data 
WHERE category_id = ( 

SELECT GROUP_CONCAT(id 
SEPARATOR ' OR category_id = ') 
FROM product_categories 
WHERE parent_id = ( 

SELECT GROUP_CONCAT(id 
SEPARATOR ' OR parent_id = ') 
FROM product_categories 
WHERE parent_id =1) 

ORDER BY NULL) 

ORDER BY NULL) 

ORDER BY NULL) 

當我,例如,手動執行最深嵌套3子查詢,我得到10,11,12,33,34,35作爲最終結果。當我一次執行完整的3個子查詢時,他們會返回10,11,12。

我失蹤結果..

回答

3

,而不是試圖依靠GROUP_CONCAT,這是一個INNER JOIN工作得到從那裏關係存在多個表的結果。

SELECT 
    -- Best to specify the precise fields you want here instead of * 
    * 

FROM partners p 

INNER JOIN product_feeds pf 
ON pf.partner_id = p.id 

INNER JOIN product_data pd 
ON pd.feed_id = pf.id 

INNER JOIN product_categories pc 
ON pc.id = pd.category_id 

INNER JOIN product_categories pcparent 
ON pcparent.id = pc.parent_id 
AND pcparent.parent_id = 1