0

いくつかのサブクエリを含むクエリがありますが、奇妙なことに、クエリを 1 つずつ手動で実行した場合と同じ値がサブクエリから返されません。最初はクエリ内で '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 に答える