Как получить вложенный подзапрос для распознавания столбца родительского запроса - PullRequest
3 голосов
/ 17 августа 2011

У меня проблема, когда я пытаюсь вычислить сумму значений для данного идентификатора.Я решил сделать это, используя подзапросы (как правило, я бы использовал объединение, но я также держу счетчик для каждого подзапроса в целях отсечения - см. Этот вопрос для получения дополнительной информации).Ради этого вопроса предположим, что у меня есть следующий запрос 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, запрос вернется нормально (хотя и с неправильными результатами).Любая идея, как заставить подзапрос распознавать столбец родительской таблицы для использования в моем состоянии?Спасибо.

1 Ответ

1 голос
/ 04 сентября 2011

Вы пробовали что-то подобное для подсчета строк вместо пользовательской переменной?

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

Дайте мне знать, если это работает, это интересный вопрос, который мы здесь рассматриваем.

...