2011-08-17 8 views
3

与えられたIDごとの合計値を計算しようとしているところに問題があります。私はサブクエリを使用してこれを行うことにしました(通常、私は結合を使用しますが、私はまた、各サブクエリのためにクリッピング目的のためのカウンタを保持しています - see this question詳細)。この質問のために、私は次のようのMySQLクエリを持っていると仮定します。親クエリの列を認識するためにネストされたサブクエリを取得する方法

問題は、私は experiement_idに一致するサブクエリ内の行を特定しようとしている行 7、上で起こる
/* 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 

- I 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` 

それは我々がここで検討している興味深い問題であり、これが動作するかどうか私に教えてください。

関連する問題