подзапрос не имеет доступа к псевдониму родительского запроса

0
SELECT *,
'batch'.'batch_id' as 'batchId',
'batch'.'center_id' as 'centerId',
'batch'.'scheme_id' as 'schemeId',
'batch'.'batch_start_date' as 'BatchStartDate',
(SELECT COUNT('attendance_count') AS 'eligible_for_assessment' FROM 
     (SELECT COUNT('mark_attendance') AS 'attendance_count' FROM 'dailyattendance' 
      WHERE 'mark_attendance'="p" AND 'scheme_id'='schemeId' AND 'batch_id'='batchId'
      AND 'center_id'='centerId' GROUP BY 'candidate_id') AS 'sfkjsd'
      WHERE 'attendance_count' > 6
)
from 'batch'

в этом суб-запросе возвращается обратная ошибка, "Неизвестный столбец" схемаId "в разделе" where clause ". в подзапросе mysql, обращающемся к родительским параметрам на третьем уровне подзапроса?

(SELECT COUNT('attendance_count') AS 'eligible_for_assessment' FROM 
     (SELECT COUNT('mark_attendance') AS 'attendance_count' FROM 'dailyattendance' 
      WHERE 'mark_attendance'="p" AND 'scheme_id'=1 AND 'batch_id'=2
      AND 'center_id'=3 GROUP BY 'candidate_id') AS 'sfkjsd'
      WHERE 'attendance_count' > 6
)

этот запрос возвращает мне общее количество кандидатов, которые присутствуют более 6 дней в месяц. schemeId нужно передать этот " schemeId " динамически из запроса родительского выбора.

(SELECT COUNT(*) from 'enrolment' WHERE
'enrolment'.'batch_id'='batchId' AND 'enrolment'.'center_id'='centerId'
AND 'enrolment'.'ew_enrolled_for_scheme'='schemeId') as 'enrolled_student_count'

в этом запросе я использую родительскую селекторную schemeId и другие, и это дает мне результат подсчета. но если я помещаю еще один подзапрос внутри FROM (SELECT....) в подзапросе, как указано выше, я упоминаю, что он даст мне ошибку.

  • 0
    Вы делаете ошибку здесь. scheme_id = schemeId И batch_id = batchId с правой стороны, это не должен быть schemeId . это должно быть фактическое значение, которое вы сравниваете.
  • 0
    я хочу передать scheid-идентификатор из этого селектора batch.scheme_id as schemeId для подзапроса.
Показать ещё 1 комментарий
Теги:
subquery

3 ответа

0

Да, правильно, мы не можем передать первый уровень псевдонима на третьем уровне подзапроса. Вам нужно выбрать столбец третьего уровня, а затем сравнить его со вторым уровнем.

SELECT *,
'batch'.'scheme_id' as 'schemeId',
'batch'.'center_id' as 'centerId',
'batch'.'batch_id' as 'batchId',
(SELECT COUNT('attendance_count') AS 'eligible_for_assessment' FROM 
     (SELECT COUNT('mark_attendance') AS 'attendance_count',
      'center_id' AS 'daCenterId', 'batch_id' AS 'daBatchId',
      'scheme_id' AS 'daSchemeId' FROM 'dailyattendance'
      WHERE 'mark_attendance'="p" GROUP BY 'candidate_id')
      AS 'sfkjsd'
WHERE 'attendance_count' > 6 AND 'daCenterId'='centerId'
AND 'daBatchId'='batchId' AND 'daSchemeId'='schemeId')
FROM 'batch'

Надеюсь, это поможет другим!

0

Насколько я знаю, вы не сможете пройти "schemId". Попробуйте использовать другой подзапрос в предложении where.

    SELECT *,
    'batch'.'batch_id' as 'batchId',
    'batch'.'center_id' as 'centerId',
    'batch'.'scheme_id' as 'schemeId',
    'batch'.'batch_start_date' as 'BatchStartDate',
    (SELECT COUNT('attendance_count') AS 'eligible_for_assessment' 
    FROM 
         (SELECT COUNT('mark_attendance') AS 'attendance_count' 
          FROM 'dailyattendance' a 
          WHERE 'mark_attendance'="p" AND 'batch_id'='batchId'
          AND 'scheme_id' in (select 'scheme_id' from 'batch') 
          AND 'center_id'='centerId' 
          GROUP BY 'candidate_id') AS 'sfkjsd'
    WHERE 'attendance_count' > 6)
    from 'batch'
  • 0
    batch.batch_id as batchId Этот селектор я использую как ссылку в подзапросе, если я создаю объединение в подзапросе, я не могу использовать свой селектор.
  • 0
    затем попробуйте использовать другой подзапрос в предложении where, например. где mark_attendance ="p" AND batch_id = batchId` И scheme_id в (выберите отличный scheme_id из 'batch')
Показать ещё 5 комментариев
0

scheme_id= schemeId

должно быть

scheme_id= batch. scheme_id

а также

batch_id= batchId

должно быть

batch_id= batch. batch_id

попробуйте этот код

SELECT *,
'batch'.'batch_id' as 'batchId',
'batch'.'center_id' as 'centerId',
'batch'.'scheme_id' as 'schemeId',
'batch'.'batch_start_date' as 'BatchStartDate',
(SELECT COUNT('attendance_count') AS 'eligible_for_assessment' FROM 
     (SELECT COUNT('mark_attendance') AS 'attendance_count' FROM 'dailyattendance' 
      WHERE 'mark_attendance'="p" AND 'scheme_id'='batch'.'scheme_id' AND 'batch_id'='batch'.'batch_id'
      AND 'center_id'='centerId' GROUP BY 'candidate_id') AS 'sfkjsd'
      WHERE 'attendance_count' > 6
)
from 'batch'
  • 0
    без объединения вы не можете использовать пакетную таблицу, она выдает ошибку Unknown column 'batch.scheme_id' in 'where clause' . если мы присоединяемся к таблице пакетной обработки, то у нас нет никаких ссылок из родительского селектора, и результат не будет возвращаться, как мы хотим.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню