嵌套的GROUP_CONCAT查询不返回所有值

时间:2013-03-28 13:14:53

标签: mysql group-concat

我有一个带有几个子查询的查询,但奇怪的是子查询不会返回相同的值,就像我手动逐个执行查询一样。起初我在查询中使用了'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。

我缺少结果..

1 个答案:

答案 0 :(得分: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