0

我有一个带有几个子查询的查询,但奇怪的是子查询不会返回与我手动执行查询相同的值。起初我在查询中使用了“IN”,但没有索引被使用,所以我将它们转换为'='。结果与“IN”或当我使用转换为“=”变体时相同。

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。

我缺少结果..

4

1 回答 1

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
于 2013-03-28T13:22:15.827 回答