mySql colonna sconosciuta
-
06-07-2019 - |
Domanda
Ho la seguente query
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
e viene visualizzato il seguente errore
CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'count_absent' in 'where clause'
Non so come risolverlo poiché la colonna si trova nell'istruzione select
Soluzione
la colonna derivata count_absent viene elaborata nella clausola SELECT, che viene elaborata DOPO la clausola WHERE e quindi non è disponibile. Sarebbe disponibile se si racchiudesse l'intera query in un SELECT esterno, per poter accedere alla colonna derivata.
cioè.
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
Altri suggerimenti
Non sono sicuro di ciò che stai tentando di realizzare qui, ma nota che la query incorporata che fornisce count_absent non utilizza criteri diversi da " absent = 1 " ;. Quindi non importa quale studente stai guardando, otterrai sempre un conteggio di tutti i record student_attendance con assente = 1. Ho il sospetto che tu voglia limitare questo ai record student_attendance per lo studente selezionato.
Inoltre, puoi esaminare " join " clausola. Ciò renderebbe le tue domande molto più facili da capire, quindi il vecchio stile si unisce a dove.