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