columna desconocida mySql
-
06-07-2019 - |
Pregunta
Tengo la siguiente consulta
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
y obtengo el siguiente error
CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'count_absent' in 'where clause'
No sé cómo resolver esto ya que la columna está en la declaración de selección
Solución
su columna derivada count_absent se procesa en la cláusula SELECT, que se procesa DESPUÉS de la cláusula WHERE, por lo que no está disponible. Estaría disponible si envolvía la consulta completa en un SELECT externo, para poder acceder a la columna derivada.
es decir
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
Otros consejos
No estoy seguro de lo que está tratando de lograr aquí, pero tenga en cuenta que la consulta incrustada que proporciona count_absent no utiliza ningún criterio que no sea " absent = 1 " ;. Por lo tanto, no importa a qué estudiante esté mirando, siempre obtendrá un recuento de todos los registros de asistencia de estudiantes con ausente = 1. Sospecho que desea limitar esto a los registros de asistencia de estudiantes para el estudiante seleccionado.
Además, puede investigar la " unirse " cláusula. Esto hará que sus consultas sean mucho más fáciles de entender que el estilo antiguo que se une con where.