2011-08-17 53 views
3

我有一個問題,我試圖計算每個給定的ID的值的總和。我決定使用子查詢來做到這一點(通常我會使用連接,但我也爲每個子查詢保留一個計數器用於裁剪目的 - see this question以獲取更多信息)。對於這個問題的緣故,假設我有以下的MySQL查詢:如何獲取嵌套的子查詢來識別父查詢列

/* 1. */ SELECT 
/* 2. */  t1.experiement_id, 
/* 3. */  (SELECT sum(x.size) 
/* 4. */  FROM (SELECT size, (@rownum := @rownum + 1) AS `rownum` 
/* 5. */    FROM data AS t0 
/* 6. */    JOIN (select @rownum := 0) 
/* 7. */    WHERE t0.experiment_id = t1.experiment_id 
/* 8. */    ORDER BY size) AS x 
/* 9. */    WHERE x.rownum <= t2.clip_index) AS `sum` 
/* 10. */ 
/* 11. */ FROM data  AS t1 
/* 12. */ JOIN data_clip AS t2 USING (experiment_id) 
/* 13. */ 
/* 14. */ GROUP BY t1.experiment_id 

7行,在那裏我試圖在子查詢匹配experiement_id行隔離問題發生 - 我會得到一個錯誤,t1.experiement_id是一個未知的列。這隻發生在嵌套深度超過1級的查詢中。就像支票一樣,我注意到t2.clip_index正在處理中。如果我註釋掉第7行,查詢返回正常(儘管結果不正確)。任何想法如何使子查詢識別父表的列在我的情況下使用?謝謝。

+0

我有同樣的問題,你有沒有找到解決方案? – aleroot

+0

對不起,還沒有。 – sa125

回答

1

你有沒有嘗試過這樣的計數行而不是用戶定義的變量?

(SELECT sum(size) FROM data AS t0     
WHERE t0.experiment_id = t1.experiment_id 
ORDER BY size HAVING COUNT(*)<=t2.clip_index 
) AS `sum` 

讓我知道這是否有效,這是一個有趣的問題,我們正在這裏審查。