mySql неизвестный столбец
-
06-07-2019 - |
Вопрос
У меня есть следующий запрос
SELECT
s.name,
s.surname,
s.id_nr,
s.student_nr,
s.createdate,
s.enddate,
(SELECT count(*) FROM Student_Attendance WHERE absent = 1) AS count_absent
FROM
Student AS s,
Student_Contact AS sc,
Student_Payment AS p,
Student_Courses AS scou,
Modules AS m,
Student_Certificate AS scer,
Student_Results AS sr,
Lecturer_Profile AS l,
Lecturer_Comments AS lc,
Student_Attendance AS sa,
Student_Training AS t
WHERE s.s_id = sc.s_id
AND s.s_id = p.s_id
AND s.s_id = scou.s_id
AND scou.c_id = m.c_id
AND s.s_id = scer.s_id
AND s.s_id = sr.s_id
AND s.s_id = lc.s_id
AND lc.l_id = l.l_id
AND s.s_id = sa.s_id
AND LOWER(s.name) = 'andile'
AND LOWER(s.surname) = ' orson vulture'
AND s.id_nr = 8403125062671
AND LOWER(sc.race) = 'white'
AND sc.gender = 1
AND LOWER(sc.area) = 'gauteng'
AND p.payment_type = 1
AND s.student_nr = 203087506
AND scou.c_id = 1 AND sc.age = 23
AND scer.certificate_number = 3424234
AND sr.result = 32
AND l.l_id= 1
AND count_absent = 3
AND LOWER(s.branch) = 'pretoria'
AND LOWER(s.campus_name) = 'pretoria'
AND LOWER(sc.kin_name) = 'self'
AND t.s_id = s.s_id
AND t.sp_id = 1
и я получаю следующую ошибку
CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'count_absent' in 'where clause'
Не знаю, как это решить, поскольку столбец находится в операторе выбора.
Решение
ваш производный столбец count_absent обрабатывается в предложении SELECT, которое обрабатывается ПОСЛЕ предложения WHERE и поэтому недоступно.Он был бы доступен, если бы вы обернули весь запрос во внешний SELECT, чтобы иметь возможность получить доступ к производному столбцу.
то есть
select * from (
SELECT
s.name,
s.surname,
s.id_nr,
s.student_nr,
s.createdate,
s.enddate,
(SELECT count(*) FROM Student_Attendance WHERE absent = 1) AS count_absent
FROM
Student AS s,
Student_Contact AS sc,
Student_Payment AS p,
Student_Courses AS scou,
Modules AS m,
Student_Certificate AS scer,
Student_Results AS sr,
Lecturer_Profile AS l,
Lecturer_Comments AS lc,
Student_Attendance AS sa,
Student_Training AS t
WHERE s.s_id = sc.s_id
AND s.s_id = p.s_id
...
AND t.s_id = s.s_id
AND t.sp_id = 1
) as x where count_absent = 3
Другие советы
Я не уверен, что вы пытаетесь выполнить, но обратите внимание, что во встроенном запросе, который указывает count_absent, не используются никакие критерии, кроме " absent = 1 " ;. Таким образом, не имеет значения, на какого студента вы смотрите, вы всегда получите счет всех записей student_attendance с отсутствующим = 1. Я подозреваю, что вы хотите ограничить это записями student_attendance для выбранного студента.
Кроме того, вы можете исследовать " присоединиться " пункт. Это сделало бы ваши запросы намного проще, чем в старом стиле, и где.